var_naming and revert
This commit is contained in:
parent
64d48e4879
commit
69281ab33c
|
|
@ -230,14 +230,14 @@ class RandomizeMarkVisitor final : public VNVisitor {
|
||||||
|
|
||||||
// Build MemberSel chain from variable path
|
// Build MemberSel chain from variable path
|
||||||
AstNodeExpr* buildMemberSelChain(AstVarRef* rootVarRefp, const std::vector<AstVar*>& path) {
|
AstNodeExpr* buildMemberSelChain(AstVarRef* rootVarRefp, const std::vector<AstVar*>& path) {
|
||||||
AstNodeExpr* current = rootVarRefp->cloneTree(false);
|
AstNodeExpr* exprp = rootVarRefp->cloneTree(false);
|
||||||
for (AstVar* memberVarp : path) {
|
for (AstVar* memberVarp : path) {
|
||||||
AstMemberSel* memberSel
|
AstMemberSel* memberSelp
|
||||||
= new AstMemberSel{rootVarRefp->fileline(), current, memberVarp};
|
= new AstMemberSel{rootVarRefp->fileline(), exprp, memberVarp};
|
||||||
memberSel->user2p(m_classp);
|
memberSelp->user2p(m_classp);
|
||||||
current = memberSel;
|
exprp = memberSelp;
|
||||||
}
|
}
|
||||||
return current;
|
return exprp;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clone constraints from nested rand class members
|
// Clone constraints from nested rand class members
|
||||||
|
|
@ -273,11 +273,11 @@ class RandomizeMarkVisitor final : public VNVisitor {
|
||||||
cloneConstrp->foreach([&](AstVarRef* varRefp) {
|
cloneConstrp->foreach([&](AstVarRef* varRefp) {
|
||||||
if (!varRefp || !varRefp->varp()) return;
|
if (!varRefp || !varRefp->varp()) return;
|
||||||
|
|
||||||
AstNodeExpr* chain = buildMemberSelChain(rootVarRefp, newPath);
|
AstNodeExpr* const chainp = buildMemberSelChain(rootVarRefp, newPath);
|
||||||
AstMemberSel* finalSel = new AstMemberSel{varRefp->fileline(),
|
AstMemberSel* const finalSelp = new AstMemberSel(varRefp->fileline(),
|
||||||
chain, varRefp->varp()};
|
chainp, varRefp->varp());
|
||||||
finalSel->user2p(m_classp);
|
finalSelp->user2p(m_classp);
|
||||||
varRefp->replaceWith(finalSel);
|
varRefp->replaceWith(finalSelp);
|
||||||
VL_DO_DANGLING(varRefp->deleteTree(), varRefp);
|
VL_DO_DANGLING(varRefp->deleteTree(), varRefp);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -301,9 +301,9 @@ class RandomizeMarkVisitor final : public VNVisitor {
|
||||||
cloneCons->name(fromp->name() + GLOBAL_CONSTRAINT_SEPARATOR + cloneCons->name());
|
cloneCons->name(fromp->name() + GLOBAL_CONSTRAINT_SEPARATOR + cloneCons->name());
|
||||||
cloneCons->foreach([&](AstVarRef* varRefp) {
|
cloneCons->foreach([&](AstVarRef* varRefp) {
|
||||||
if (!varRefp || !varRefp->varp()) return;
|
if (!varRefp || !varRefp->varp()) return;
|
||||||
AstVarRef* clonedFromp = fromp->cloneTree(false);
|
AstVarRef* const clonedFromp = fromp->cloneTree(false);
|
||||||
if (!clonedFromp) return;
|
if (!clonedFromp) return;
|
||||||
AstMemberSel* varMemberp
|
AstMemberSel* const varMemberp
|
||||||
= new AstMemberSel{cloneCons->fileline(), clonedFromp, varRefp->varp()};
|
= new AstMemberSel{cloneCons->fileline(), clonedFromp, varRefp->varp()};
|
||||||
varMemberp->user2p(m_classp);
|
varMemberp->user2p(m_classp);
|
||||||
varRefp->replaceWith(varMemberp);
|
varRefp->replaceWith(varMemberp);
|
||||||
|
|
@ -572,7 +572,7 @@ class RandomizeMarkVisitor final : public VNVisitor {
|
||||||
|
|
||||||
if (nodep->varp()->lifetime().isStatic()) m_staticRefs.emplace(nodep);
|
if (nodep->varp()->lifetime().isStatic()) m_staticRefs.emplace(nodep);
|
||||||
|
|
||||||
if (nodep->varp()->rand().isRandomizable()) { nodep->user1(true); }
|
if (nodep->varp()->rand().isRandomizable()) nodep->user1(true);
|
||||||
}
|
}
|
||||||
void visit(AstMemberSel* nodep) override {
|
void visit(AstMemberSel* nodep) override {
|
||||||
if (!m_constraintExprGenp) return;
|
if (!m_constraintExprGenp) return;
|
||||||
|
|
@ -710,10 +710,10 @@ class ConstraintExprVisitor final : public VNVisitor {
|
||||||
// (used to format "%@.%@" for struct arrays)
|
// (used to format "%@.%@" for struct arrays)
|
||||||
|
|
||||||
// Build full path for a MemberSel chain (e.g., "obj.l2.l3.l4")
|
// Build full path for a MemberSel chain (e.g., "obj.l2.l3.l4")
|
||||||
std::string buildMemberPath(AstMemberSel* memberSelp) {
|
std::string buildMemberPath(const AstMemberSel* memberSelp) {
|
||||||
if (!memberSelp) return "";
|
if (!memberSelp) return "";
|
||||||
|
|
||||||
AstNode* fromp = memberSelp->fromp();
|
const AstNode* fromp = memberSelp->fromp();
|
||||||
if (VN_IS(fromp, VarRef)) {
|
if (VN_IS(fromp, VarRef)) {
|
||||||
// Base case: reached root VarRef
|
// Base case: reached root VarRef
|
||||||
return VN_AS(fromp, VarRef)->name() + "." + memberSelp->name();
|
return VN_AS(fromp, VarRef)->name() + "." + memberSelp->name();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue