mirror of
https://github.com/verilator/verilator.git
synced 2026-10-07 02:23:19 +02:00
Internals: Remove AstRefDType ledger parallel scaffolding in favor of AstRefDType tags (#8492 partial) (#8513)
This commit is contained in:
+6
-12
@@ -73,7 +73,6 @@
|
||||
#include "V3ConstPool.h"
|
||||
#include "V3Error.h"
|
||||
#include "V3Global.h"
|
||||
#include "V3LinkDotIfaceCapture.h"
|
||||
#include "V3LinkLValue.h"
|
||||
#include "V3MemberMap.h"
|
||||
#include "V3Number.h"
|
||||
@@ -2442,11 +2441,6 @@ class WidthVisitor final : public VNVisitor {
|
||||
if (nodep->stmtsp()) nodep->addNextHere(nodep->stmtsp()->unlinkFrBack());
|
||||
VL_DO_DANGLING(nodep->unlinkFrBack()->deleteTree(), nodep);
|
||||
}
|
||||
// Delete a subtree after removing any saved references that point into it.
|
||||
static void deleteTreeCaptured(AstNode* nodep) {
|
||||
V3LinkDotIfaceCapture::purgeDeletedSubtree(nodep);
|
||||
VL_DO_DANGLING(nodep->deleteTree(), nodep);
|
||||
}
|
||||
void visit(AstAttrOf* nodep) override {
|
||||
VL_RESTORER(m_attrp);
|
||||
m_attrp = nodep;
|
||||
@@ -2463,7 +2457,7 @@ class WidthVisitor final : public VNVisitor {
|
||||
= (nodep->attrType() == VAttrType::DIM_UNPK_DIMENSIONS ? dim.second
|
||||
: (dim.first + dim.second));
|
||||
nodep->replaceWith(new AstConst(nodep->fileline(), AstConst::Signed32{}, val));
|
||||
VL_DO_DANGLING(deleteTreeCaptured(nodep), nodep);
|
||||
VL_DO_DANGLING(pushDeletep(nodep), nodep);
|
||||
break;
|
||||
}
|
||||
case VAttrType::DIM_BITS_OR_NUMBER: {
|
||||
@@ -2519,7 +2513,7 @@ class WidthVisitor final : public VNVisitor {
|
||||
case VAttrType::DIM_LOW: {
|
||||
AstNode* const newp = new AstConst(nodep->fileline(), AstConst::Signed32{}, 0);
|
||||
nodep->replaceWith(newp);
|
||||
VL_DO_DANGLING(deleteTreeCaptured(nodep), nodep);
|
||||
VL_DO_DANGLING(pushDeletep(nodep), nodep);
|
||||
break;
|
||||
}
|
||||
case VAttrType::DIM_RIGHT:
|
||||
@@ -2541,7 +2535,7 @@ class WidthVisitor final : public VNVisitor {
|
||||
AstNodeExpr* const newp
|
||||
= new AstConst(nodep->fileline(), AstConst::Signed32{}, -1);
|
||||
nodep->replaceWith(newp);
|
||||
VL_DO_DANGLING(deleteTreeCaptured(nodep), nodep);
|
||||
VL_DO_DANGLING(pushDeletep(nodep), nodep);
|
||||
break;
|
||||
}
|
||||
case VAttrType::DIM_BITS: {
|
||||
@@ -2574,21 +2568,21 @@ class WidthVisitor final : public VNVisitor {
|
||||
AstConst* const newp = dimensionValue(nodep->fileline(), baseDTypep,
|
||||
nodep->attrType(), dim);
|
||||
nodep->replaceWith(newp);
|
||||
VL_DO_DANGLING(deleteTreeCaptured(nodep), nodep);
|
||||
VL_DO_DANGLING(pushDeletep(nodep), nodep);
|
||||
}
|
||||
} else if (VN_IS(nodep->dimp(), Const)) {
|
||||
const int dim = VN_AS(nodep->dimp(), Const)->toSInt();
|
||||
AstConst* const newp
|
||||
= dimensionValue(nodep->fileline(), dtypep, nodep->attrType(), dim);
|
||||
nodep->replaceWith(newp);
|
||||
VL_DO_DANGLING(deleteTreeCaptured(nodep), nodep);
|
||||
VL_DO_DANGLING(pushDeletep(nodep), nodep);
|
||||
} else { // Need a runtime lookup table. Yuk.
|
||||
UASSERT_OBJ(nodep->fromp() && dtypep, nodep, "Unsized expression");
|
||||
AstVarRef* const tabRefp = dimensionVarRefp(dtypep, nodep->attrType(), msbdim);
|
||||
AstNodeExpr* const dimp = nodep->dimp()->unlinkFrBack();
|
||||
AstNodeExpr* const newp = new AstArraySel{nodep->fileline(), tabRefp, dimp};
|
||||
nodep->replaceWith(newp);
|
||||
VL_DO_DANGLING(deleteTreeCaptured(nodep), nodep);
|
||||
VL_DO_DANGLING(pushDeletep(nodep), nodep);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user