mirror of
https://github.com/verilator/verilator.git
synced 2025-02-02 03:34:05 +00:00
Support AstClass::repairCache() after V3Class (#3431)
This is a pre-PR to #3363. Signed-off-by: Krzysztof Bieganski <kbieganski@antmicro.com>
This commit is contained in:
parent
0a91ddf38a
commit
e018eb7bac
@ -1309,7 +1309,8 @@ void AstClassPackage::cloneRelink() {
|
|||||||
}
|
}
|
||||||
void AstClass::insertCache(AstNode* nodep) {
|
void AstClass::insertCache(AstNode* nodep) {
|
||||||
const bool doit = (VN_IS(nodep, Var) || VN_IS(nodep, EnumItemRef)
|
const bool doit = (VN_IS(nodep, Var) || VN_IS(nodep, EnumItemRef)
|
||||||
|| (VN_IS(nodep, NodeFTask) && !VN_AS(nodep, NodeFTask)->isExternProto()));
|
|| (VN_IS(nodep, NodeFTask) && !VN_AS(nodep, NodeFTask)->isExternProto())
|
||||||
|
|| VN_IS(nodep, CFunc));
|
||||||
if (doit) {
|
if (doit) {
|
||||||
if (m_members.find(nodep->name()) != m_members.end()) {
|
if (m_members.find(nodep->name()) != m_members.end()) {
|
||||||
nodep->v3error("Duplicate declaration of member name: " << nodep->prettyNameQ());
|
nodep->v3error("Duplicate declaration of member name: " << nodep->prettyNameQ());
|
||||||
@ -1320,7 +1321,14 @@ void AstClass::insertCache(AstNode* nodep) {
|
|||||||
}
|
}
|
||||||
void AstClass::repairCache() {
|
void AstClass::repairCache() {
|
||||||
clearCache();
|
clearCache();
|
||||||
for (AstNode* itemp = membersp(); itemp; itemp = itemp->nextp()) { insertCache(itemp); }
|
for (auto* itemp = membersp(); itemp; itemp = itemp->nextp()) {
|
||||||
|
if (const auto* const scopep = VN_CAST(itemp, Scope)) {
|
||||||
|
for (auto* itemp = scopep->blocksp(); itemp; itemp = itemp->nextp())
|
||||||
|
insertCache(itemp);
|
||||||
|
} else {
|
||||||
|
insertCache(itemp);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
bool AstClass::isClassExtendedFrom(const AstClass* refClassp, const AstClass* baseClassp) {
|
bool AstClass::isClassExtendedFrom(const AstClass* refClassp, const AstClass* baseClassp) {
|
||||||
// TAIL RECURSIVE
|
// TAIL RECURSIVE
|
||||||
|
@ -97,6 +97,7 @@ private:
|
|||||||
m_prefix = nodep->name() + "__02e"; // .
|
m_prefix = nodep->name() + "__02e"; // .
|
||||||
iterateChildren(nodep);
|
iterateChildren(nodep);
|
||||||
}
|
}
|
||||||
|
nodep->repairCache();
|
||||||
}
|
}
|
||||||
virtual void visit(AstNodeModule* nodep) override {
|
virtual void visit(AstNodeModule* nodep) override {
|
||||||
// Visit for NodeModules that are not AstClass (AstClass is-a AstNodeModule)
|
// Visit for NodeModules that are not AstClass (AstClass is-a AstNodeModule)
|
||||||
|
Loading…
Reference in New Issue
Block a user