Internals: Refactor 713dab27 to avoid IfaceRef being known in LinkCells

This commit is contained in:
Wilson Snyder 2024-12-02 21:12:04 -05:00
parent 59fd238a05
commit a247041cab
3 changed files with 10 additions and 12 deletions

View File

@ -2121,9 +2121,9 @@ public:
bool isScBigUint() const VL_MT_STABLE;
bool isScSensitive() const { return m_scSensitive; }
bool isSigPublic() const;
bool isSigModPublic() const { return m_sigModPublic; }
bool isSigUserRdPublic() const { return m_sigUserRdPublic; }
bool isSigUserRWPublic() const { return m_sigUserRWPublic; }
bool isSigModPublic() const { return m_sigModPublic && !isIfaceRef(); }
bool isSigUserRdPublic() const { return m_sigUserRdPublic && !isIfaceRef(); }
bool isSigUserRWPublic() const { return m_sigUserRWPublic && !isIfaceRef(); }
bool isTrace() const { return m_trace; }
bool isRand() const { return m_rand.isRand(); }
bool isRandC() const { return m_rand.isRandC(); }

View File

@ -437,7 +437,8 @@ void AstNetlist::timeprecisionMerge(FileLine*, const VTimescale& value) {
}
bool AstVar::isSigPublic() const {
return (m_sigPublic || (v3Global.opt.allPublic() && !isTemp() && !isGenVar()));
return (m_sigPublic || (v3Global.opt.allPublic() && !isTemp() && !isGenVar()))
&& !isIfaceRef();
}
bool AstVar::isScQuad() const { return (isSc() && isQuad() && !isScBv() && !isScBigUint()); }
bool AstVar::isScBv() const {

View File

@ -430,23 +430,20 @@ class LinkParseVisitor final : public VNVisitor {
VL_DO_DANGLING(nodep->unlinkFrBack()->deleteTree(), nodep);
} else if (nodep->attrType() == VAttrType::VAR_PUBLIC) {
UASSERT_OBJ(m_varp, nodep, "Attribute not attached to variable");
// Public ifacerefs aren't supported - be compatible with older parser that ignored it
if (!m_varp->isIfaceRef()) {
m_varp->sigUserRWPublic(true);
m_varp->sigModPublic(true);
}
m_varp->sigUserRWPublic(true);
m_varp->sigModPublic(true);
VL_DO_DANGLING(nodep->unlinkFrBack()->deleteTree(), nodep);
} else if (nodep->attrType() == VAttrType::VAR_PUBLIC_FLAT) {
UASSERT_OBJ(m_varp, nodep, "Attribute not attached to variable");
if (!m_varp->isIfaceRef()) m_varp->sigUserRWPublic(true);
m_varp->sigUserRWPublic(true);
VL_DO_DANGLING(nodep->unlinkFrBack()->deleteTree(), nodep);
} else if (nodep->attrType() == VAttrType::VAR_PUBLIC_FLAT_RD) {
UASSERT_OBJ(m_varp, nodep, "Attribute not attached to variable");
if (!m_varp->isIfaceRef()) m_varp->sigUserRdPublic(true);
m_varp->sigUserRdPublic(true);
VL_DO_DANGLING(nodep->unlinkFrBack()->deleteTree(), nodep);
} else if (nodep->attrType() == VAttrType::VAR_PUBLIC_FLAT_RW) {
UASSERT_OBJ(m_varp, nodep, "Attribute not attached to variable");
if (!m_varp->isIfaceRef()) m_varp->sigUserRWPublic(true);
m_varp->sigUserRWPublic(true);
VL_DO_DANGLING(nodep->unlinkFrBack()->deleteTree(), nodep);
} else if (nodep->attrType() == VAttrType::VAR_ISOLATE_ASSIGNMENTS) {
UASSERT_OBJ(m_varp, nodep, "Attribute not attached to variable");