diff --git a/src/V3Ast.h b/src/V3Ast.h index 01ff69a85..405d3ad73 100644 --- a/src/V3Ast.h +++ b/src/V3Ast.h @@ -2298,7 +2298,7 @@ private: VAccess m_access; // Left hand side assignment AstVar* m_varp; // [AfterLink] Pointer to variable itself AstVarScope* m_varScopep = nullptr; // Varscope for hierarchy - AstNodeModule* m_packagep = nullptr; // Package hierarchy + AstNodeModule* m_classOrPackagep = nullptr; // Package hierarchy string m_name; // Name of variable string m_hiername; // Scope converted into name-> for emitting bool m_hierThis = false; // Hiername points to "this" function @@ -2336,8 +2336,8 @@ public: void hiername(const string& hn) { m_hiername = hn; } bool hierThis() const { return m_hierThis; } void hierThis(bool flag) { m_hierThis = flag; } - AstNodeModule* packagep() const { return m_packagep; } - void packagep(AstNodeModule* nodep) { m_packagep = nodep; } + AstNodeModule* classOrPackagep() const { return m_classOrPackagep; } + void classOrPackagep(AstNodeModule* nodep) { m_classOrPackagep = nodep; } // Know no children, and hot function, so skip iterator for speed // See checkTreeIter also that asserts no children // cppcheck-suppress functionConst @@ -2723,8 +2723,8 @@ public: void addFvarp(AstNode* nodep) { addNOp1p(nodep); } bool isFunction() const { return fvarp() != nullptr; } // op2 = Class/package scope - AstNode* packagep() const { return op2p(); } - void packagep(AstNode* nodep) { setNOp2p(nodep); } + AstNode* classOrPackagep() const { return op2p(); } + void classOrPackagep(AstNode* nodep) { setNOp2p(nodep); } // op3 = Statements/Ports/Vars AstNode* stmtsp() const { return op3p(); } // op3 = List of statements void addStmtsp(AstNode* nodep) { addNOp3p(nodep); } @@ -2774,7 +2774,7 @@ class AstNodeFTaskRef VL_NOT_FINAL : public AstNodeStmt { // Functions are not statements, while tasks are. AstNodeStmt needs isStatement() to deal. private: AstNodeFTask* m_taskp = nullptr; // [AfterLink] Pointer to task referenced - AstNodeModule* m_packagep = nullptr; // Package hierarchy + AstNodeModule* m_classOrPackagep = nullptr; // Package hierarchy string m_name; // Name of variable string m_dotted; // Dotted part of scope the name()ed task/func is under or "" string m_inlinedDots; // Dotted hierarchy flattened out @@ -2808,8 +2808,8 @@ public: void taskp(AstNodeFTask* taskp) { m_taskp = taskp; } virtual void name(const string& name) override { m_name = name; } void dotted(const string& name) { m_dotted = name; } - AstNodeModule* packagep() const { return m_packagep; } - void packagep(AstNodeModule* nodep) { m_packagep = nodep; } + AstNodeModule* classOrPackagep() const { return m_classOrPackagep; } + void classOrPackagep(AstNodeModule* nodep) { m_classOrPackagep = nodep; } bool pli() const { return m_pli; } void pli(bool flag) { m_pli = flag; } // op1 = namep @@ -2994,7 +2994,7 @@ inline VNumRange AstNodeArrayDType::declRange() const { inline const char* AstNodeFTaskRef::broken() const { BROKEN_RTN(m_taskp && !m_taskp->brokeExists()); - BROKEN_RTN(m_packagep && !m_packagep->brokeExists()); + BROKEN_RTN(m_classOrPackagep && !m_classOrPackagep->brokeExists()); return nullptr; } diff --git a/src/V3AstNodes.cpp b/src/V3AstNodes.cpp index 7db866c99..87f66d414 100644 --- a/src/V3AstNodes.cpp +++ b/src/V3AstNodes.cpp @@ -1528,7 +1528,7 @@ void AstVarScope::dump(std::ostream& str) const { } void AstNodeVarRef::dump(std::ostream& str) const { this->AstNodeMath::dump(str); - if (packagep()) str << " pkg=" << nodeAddr(packagep()); + if (classOrPackagep()) str << " pkg=" << nodeAddr(classOrPackagep()); str << " " << access().arrow() << " "; } void AstVarXRef::dump(std::ostream& str) const { @@ -1620,7 +1620,7 @@ void AstActive::dump(std::ostream& str) const { } void AstNodeFTaskRef::dump(std::ostream& str) const { this->AstNodeStmt::dump(str); - if (packagep()) { str << " pkg=" << nodeAddr(packagep()); } + if (classOrPackagep()) str << " pkg=" << nodeAddr(classOrPackagep()); str << " -> "; if (dotted() != "") { str << ".=" << dotted() << " "; } if (taskp()) { diff --git a/src/V3AstNodes.h b/src/V3AstNodes.h index 924b46c6f..7396120c8 100644 --- a/src/V3AstNodes.h +++ b/src/V3AstNodes.h @@ -303,7 +303,7 @@ class AstClass final : public AstNodeModule { typedef std::map MemberNameMap; // MEMBERS MemberNameMap m_members; // Members or method children - AstClassPackage* m_packagep = nullptr; // Class package this is under + AstClassPackage* m_classOrPackagep = nullptr; // Class package this is under bool m_virtual = false; // Virtual class bool m_extended = false; // Is extension or extended by other classes void insertCache(AstNode* nodep); @@ -318,12 +318,12 @@ public: virtual void dump(std::ostream& str) const override; virtual const char* broken() const override { BROKEN_BASE_RTN(AstNodeModule::broken()); - BROKEN_RTN(m_packagep && !m_packagep->brokeExists()); + BROKEN_RTN(m_classOrPackagep && !m_classOrPackagep->brokeExists()); return nullptr; } // op1/op2/op3 in AstNodeModule - AstClassPackage* packagep() const { return m_packagep; } - void packagep(AstClassPackage* classpackagep) { m_packagep = classpackagep; } + AstClassPackage* classOrPackagep() const { return m_classOrPackagep; } + void classOrPackagep(AstClassPackage* classpackagep) { m_classOrPackagep = classpackagep; } AstNode* membersp() const { return stmtsp(); } // op2 = List of statements void addMembersp(AstNode* nodep) { insertCache(nodep); @@ -990,7 +990,7 @@ class AstClassRefDType final : public AstNodeDType { // Reference to a class private: AstClass* m_classp; // data type pointed to, BELOW the AstTypedef - AstNodeModule* m_packagep = nullptr; // Package hierarchy + AstNodeModule* m_classOrPackagep = nullptr; // Package hierarchy public: AstClassRefDType(FileLine* fl, AstClass* classp) : ASTGEN_SUPER(fl) @@ -1008,13 +1008,13 @@ public: } virtual bool same(const AstNode* samep) const override { const AstClassRefDType* asamep = static_cast(samep); - return (m_classp == asamep->m_classp && m_packagep == asamep->m_packagep); + return (m_classp == asamep->m_classp && m_classOrPackagep == asamep->m_classOrPackagep); } virtual bool similarDType(AstNodeDType* samep) const override { return this == samep || same(samep); } virtual V3Hash sameHash() const override { - return V3Hash(V3Hash(m_classp), V3Hash(m_packagep)); + return V3Hash(V3Hash(m_classp), V3Hash(m_classOrPackagep)); } virtual void dump(std::ostream& str = std::cout) const override; virtual void dumpSmall(std::ostream& str) const override; @@ -1028,8 +1028,8 @@ public: virtual AstNodeDType* virtRefDTypep() const override { return nullptr; } virtual void virtRefDTypep(AstNodeDType* nodep) override {} virtual AstNodeDType* subDTypep() const override { return nullptr; } - AstNodeModule* packagep() const { return m_packagep; } - void packagep(AstNodeModule* nodep) { m_packagep = nodep; } + AstNodeModule* classOrPackagep() const { return m_classOrPackagep; } + void classOrPackagep(AstNodeModule* nodep) { m_classOrPackagep = nodep; } AstClass* classp() const { return m_classp; } void classp(AstClass* nodep) { m_classp = nodep; } }; @@ -1167,7 +1167,7 @@ private: // Post-width typedefs are removed and point to type directly AstNodeDType* m_refDTypep = nullptr; // data type pointed to, BELOW the AstTypedef string m_name; // Name of an AstTypedef - AstNodeModule* m_packagep = nullptr; // Package hierarchy + AstNodeModule* m_classOrPackagep = nullptr; // Package hierarchy public: AstRefDType(FileLine* fl, const string& name) : ASTGEN_SUPER(fl) @@ -1197,13 +1197,13 @@ public: virtual bool same(const AstNode* samep) const override { const AstRefDType* asamep = static_cast(samep); return (m_typedefp == asamep->m_typedefp && m_refDTypep == asamep->m_refDTypep - && m_name == asamep->m_name && m_packagep == asamep->m_packagep); + && m_name == asamep->m_name && m_classOrPackagep == asamep->m_classOrPackagep); } virtual bool similarDType(AstNodeDType* samep) const override { return skipRefp()->similarDType(samep->skipRefp()); } virtual V3Hash sameHash() const override { - return V3Hash(V3Hash(m_typedefp), V3Hash(m_packagep)); + return V3Hash(V3Hash(m_typedefp), V3Hash(m_classOrPackagep)); } virtual void dump(std::ostream& str = std::cout) const override; virtual string name() const override { return m_name; } @@ -1253,8 +1253,8 @@ public: void refDTypep(AstNodeDType* nodep) { m_refDTypep = nodep; } virtual AstNodeDType* virtRefDTypep() const override { return refDTypep(); } virtual void virtRefDTypep(AstNodeDType* nodep) override { refDTypep(nodep); } - AstNodeModule* packagep() const { return m_packagep; } - void packagep(AstNodeModule* nodep) { m_packagep = nodep; } + AstNodeModule* classOrPackagep() const { return m_classOrPackagep; } + void classOrPackagep(AstNodeModule* nodep) { m_classOrPackagep = nodep; } AstNode* typeofp() const { return op2p(); } AstNode* classOrPackageOpp() const { return op3p(); } AstPin* paramsp() const { return VN_CAST(op4p(), Pin); } @@ -1395,12 +1395,12 @@ public: class AstEnumItemRef final : public AstNodeMath { private: AstEnumItem* m_itemp; // [AfterLink] Pointer to item - AstNodeModule* m_packagep; // Package hierarchy + AstNodeModule* m_classOrPackagep; // Package hierarchy public: - AstEnumItemRef(FileLine* fl, AstEnumItem* itemp, AstNodeModule* packagep) + AstEnumItemRef(FileLine* fl, AstEnumItem* itemp, AstNodeModule* classOrPackagep) : ASTGEN_SUPER(fl) , m_itemp{itemp} - , m_packagep{packagep} { + , m_classOrPackagep{classOrPackagep} { dtypeFrom(m_itemp); } ASTNODE_NODE_FUNCS(EnumItemRef) @@ -1422,8 +1422,8 @@ public: virtual string emitVerilog() override { V3ERROR_NA_RETURN(""); } virtual string emitC() override { V3ERROR_NA_RETURN(""); } virtual bool cleanOut() const override { return true; } - AstNodeModule* packagep() const { return m_packagep; } - void packagep(AstNodeModule* nodep) { m_packagep = nodep; } + AstNodeModule* classOrPackagep() const { return m_classOrPackagep; } + void classOrPackagep(AstNodeModule* nodep) { m_classOrPackagep = nodep; } }; class AstEnumDType final : public AstNodeDType { diff --git a/src/V3CUse.cpp b/src/V3CUse.cpp index 3bf389464..f9c835462 100644 --- a/src/V3CUse.cpp +++ b/src/V3CUse.cpp @@ -84,7 +84,7 @@ class CUseDTypeVisitor final : public AstNVisitor { if (nodep->user2SetOnce()) return; // Process once if (!m_impOnly) m_stater.newUse(nodep, VUseType::INT_FWD_CLASS, nodep->classp()->name()); // No class.h, it's inside the class package's h file - m_stater.newUse(nodep, VUseType::IMP_INCLUDE, nodep->classp()->packagep()->name()); + m_stater.newUse(nodep, VUseType::IMP_INCLUDE, nodep->classp()->classOrPackagep()->name()); // Need to include extends() when we implement, but no need for pointers to know VL_RESTORER(m_impOnly); { diff --git a/src/V3Class.cpp b/src/V3Class.cpp index 69c25783c..bd4e7a612 100644 --- a/src/V3Class.cpp +++ b/src/V3Class.cpp @@ -56,7 +56,7 @@ private: // Note origName is the same as the class origName so errors look correct AstClassPackage* packagep = new AstClassPackage(nodep->fileline(), nodep->origName()); packagep->name(nodep->name() + "__Vclpkg"); - nodep->packagep(packagep); + nodep->classOrPackagep(packagep); packagep->classp(nodep); v3Global.rootp()->addModulep(packagep); // Add package to hierarchy diff --git a/src/V3Dead.cpp b/src/V3Dead.cpp index e0e4fab26..db12822c4 100644 --- a/src/V3Dead.cpp +++ b/src/V3Dead.cpp @@ -107,7 +107,7 @@ private: if (AstNode* subnodep = nodep->getChildDTypep()) subnodep->user1Inc(); } void checkVarRef(AstNodeVarRef* nodep) { - if (nodep->packagep() && m_elimCells) { nodep->packagep(nullptr); } + if (nodep->classOrPackagep() && m_elimCells) nodep->classOrPackagep(nullptr); } void checkDType(AstNodeDType* nodep) { if (!nodep->generic() // Don't remove generic types @@ -130,7 +130,7 @@ private: checkAll(nodep); if (AstClass* classp = VN_CAST(nodep, Class)) { if (classp->extendsp()) classp->extendsp()->user1Inc(); - if (classp->packagep()) classp->packagep()->user1Inc(); + if (classp->classOrPackagep()) classp->classOrPackagep()->user1Inc(); m_classesp.push_back(classp); // TODO we don't reclaim dead classes yet - graph implementation instead? classp->user1Inc(); @@ -171,16 +171,16 @@ private: nodep->varScopep()->varp()->user1Inc(); } if (nodep->varp()) nodep->varp()->user1Inc(); - if (nodep->packagep()) nodep->packagep()->user1Inc(); + if (nodep->classOrPackagep()) nodep->classOrPackagep()->user1Inc(); } virtual void visit(AstNodeFTaskRef* nodep) override { iterateChildren(nodep); checkAll(nodep); - if (nodep->packagep()) { + if (nodep->classOrPackagep()) { if (m_elimCells) { - nodep->packagep(nullptr); + nodep->classOrPackagep(nullptr); } else { - nodep->packagep()->user1Inc(); + nodep->classOrPackagep()->user1Inc(); } } } @@ -194,11 +194,11 @@ private: checkAll(nodep); UASSERT_OBJ(!(m_elimCells && nodep->typedefp()), nodep, "RefDType should point to data type before typedefs removed"); - if (nodep->packagep()) { + if (nodep->classOrPackagep()) { if (m_elimCells) { - nodep->packagep(nullptr); + nodep->classOrPackagep(nullptr); } else { - nodep->packagep()->user1Inc(); + nodep->classOrPackagep()->user1Inc(); } } } @@ -206,11 +206,11 @@ private: iterateChildren(nodep); checkDType(nodep); checkAll(nodep); - if (nodep->packagep()) { + if (nodep->classOrPackagep()) { if (m_elimCells) { - nodep->packagep(nullptr); + nodep->classOrPackagep(nullptr); } else { - nodep->packagep()->user1Inc(); + nodep->classOrPackagep()->user1Inc(); } } if (nodep->classp()) nodep->classp()->user1Inc(); @@ -223,11 +223,11 @@ private: virtual void visit(AstEnumItemRef* nodep) override { iterateChildren(nodep); checkAll(nodep); - if (nodep->packagep()) { + if (nodep->classOrPackagep()) { if (m_elimCells) { - nodep->packagep(nullptr); + nodep->classOrPackagep(nullptr); } else { - nodep->packagep()->user1Inc(); + nodep->classOrPackagep()->user1Inc(); } } checkAll(nodep); @@ -372,7 +372,7 @@ private: if (AstClass* nodep = itr) { // nullptr if deleted earlier if (nodep->user1() == 0) { if (nodep->extendsp()) nodep->extendsp()->user1Inc(-1); - if (nodep->packagep()) nodep->packagep()->user1Inc(-1); + if (nodep->classOrPackagep()) nodep->classOrPackagep()->user1Inc(-1); VL_DO_DANGLING(pushDeletep(nodep->unlinkFrBack()), nodep); itr = nullptr; retry = true; diff --git a/src/V3Inline.cpp b/src/V3Inline.cpp index 681d123ef..829cf1e6c 100644 --- a/src/V3Inline.cpp +++ b/src/V3Inline.cpp @@ -153,7 +153,7 @@ private: virtual void visit(AstNodeFTaskRef* nodep) override { // Cleanup link until V3LinkDot can correct it // MethodCalls not currently supported by inliner, so keep linked - if (!nodep->packagep() && !VN_IS(nodep, MethodCall)) nodep->taskp(nullptr); + if (!nodep->classOrPackagep() && !VN_IS(nodep, MethodCall)) nodep->taskp(nullptr); iterateChildren(nodep); } virtual void visit(AstAlways* nodep) override { diff --git a/src/V3Inst.cpp b/src/V3Inst.cpp index 4ef17a730..c9bb8acc8 100644 --- a/src/V3Inst.cpp +++ b/src/V3Inst.cpp @@ -383,7 +383,7 @@ private: varrefp->name() + "__BRA__" + index + "__KET__", "", VAccess::WRITE); newp->dtypep(nodep->modVarp()->dtypep()); - newp->packagep(varrefp->packagep()); + newp->classOrPackagep(varrefp->classOrPackagep()); arrselp->addNextHere(newp); VL_DO_DANGLING(arrselp->unlinkFrBack()->deleteTree(), arrselp); } diff --git a/src/V3LinkDot.cpp b/src/V3LinkDot.cpp index 720443f2b..b54e741aa 100644 --- a/src/V3LinkDot.cpp +++ b/src/V3LinkDot.cpp @@ -355,7 +355,7 @@ public: return symp; } VSymEnt* insertBlock(VSymEnt* abovep, const string& name, AstNode* nodep, - AstNodeModule* packagep) { + AstNodeModule* classOrPackagep) { // A fake point in the hierarchy, corresponding to a begin or function/task block // After we remove begins these will go away // Note we fallback to the symbol table of the parent, as we want to find variables there @@ -365,7 +365,7 @@ public: UINFO(9, " INSERTblk se" << cvtToHex(symp) << " above=se" << cvtToHex(abovep) << " node=" << nodep << endl); symp->parentp(abovep); - symp->packagep(packagep); + symp->classOrPackagep(classOrPackagep); symp->fallbackp(abovep); nodep->user1p(symp); if (name != "") { checkDuplicate(abovep, nodep, name); } @@ -374,14 +374,14 @@ public: return symp; } VSymEnt* insertSym(VSymEnt* abovep, const string& name, AstNode* nodep, - AstNodeModule* packagep) { + AstNodeModule* classOrPackagep) { UASSERT_OBJ(abovep, nodep, "Null symbol table inserting node"); VSymEnt* symp = new VSymEnt(&m_syms, nodep); UINFO(9, " INSERTsym se" << cvtToHex(symp) << " name='" << name << "' above=se" << cvtToHex(abovep) << " node=" << nodep << endl); // We don't remember the ent associated with each node, because we // need a unique scope entry for each instantiation - symp->packagep(packagep); + symp->classOrPackagep(classOrPackagep); symp->parentp(abovep); symp->fallbackp(abovep); nodep->user1p(symp); @@ -708,7 +708,7 @@ LinkDotState* LinkDotState::s_errorThisp = nullptr; class LinkDotFindVisitor final : public AstNVisitor { // STATE LinkDotState* m_statep; // State to pass between visitors, including symbol table - AstNodeModule* m_packagep = nullptr; // Current package + AstNodeModule* m_classOrPackagep = nullptr; // Current package VSymEnt* m_modSymp = nullptr; // Symbol Entry for current module VSymEnt* m_curSymp = nullptr; // Symbol Entry for current table, where to lookup/insert string m_scope; // Scope text @@ -729,7 +729,7 @@ class LinkDotFindVisitor final : public AstNVisitor { newp->isConstructor(true); nodep->addMembersp(newp); UINFO(8, "Made implicit new for " << nodep->name() << ": " << nodep << endl); - m_statep->insertBlock(m_curSymp, newp->name(), newp, m_packagep); + m_statep->insertBlock(m_curSymp, newp->name(), newp, m_classOrPackagep); } bool isHierBlockWrapper(const string& name) const { @@ -777,7 +777,7 @@ class LinkDotFindVisitor final : public AstNVisitor { bool standalonePkg = !m_modSymp && (m_statep->forPrearray() && VN_IS(nodep, Package)); bool doit = (m_modSymp || standalonePkg); VL_RESTORER(m_scope); - VL_RESTORER(m_packagep); + VL_RESTORER(m_classOrPackagep); VL_RESTORER(m_modSymp); VL_RESTORER(m_curSymp); VL_RESTORER(m_paramNum); @@ -794,7 +794,7 @@ class LinkDotFindVisitor final : public AstNVisitor { UASSERT_OBJ(!nodep->dead(), nodep, "Module in cell tree mislabeled as dead?"); VSymEnt* upperSymp = m_curSymp ? m_curSymp : m_statep->rootEntp(); AstPackage* pkgp = VN_CAST(nodep, Package); - m_packagep = pkgp; + m_classOrPackagep = pkgp; if (standalonePkg) { if (pkgp->isDollarUnit()) { m_curSymp = m_modSymp = m_statep->dunitEntp(); @@ -802,7 +802,7 @@ class LinkDotFindVisitor final : public AstNVisitor { } else { m_scope = nodep->name(); m_curSymp = m_modSymp = m_statep->insertBlock( - upperSymp, nodep->name() + "::", nodep, m_packagep); + upperSymp, nodep->name() + "::", nodep, m_classOrPackagep); UINFO(9, "New module scope " << m_curSymp << endl); } } @@ -826,7 +826,7 @@ class LinkDotFindVisitor final : public AstNVisitor { m_scope = nodep->name(); VSymEnt* upperSymp = m_curSymp ? m_curSymp : m_statep->rootEntp(); m_curSymp = m_modSymp - = m_statep->insertBlock(upperSymp, nodep->name() + "::", nodep, m_packagep); + = m_statep->insertBlock(upperSymp, nodep->name() + "::", nodep, m_classOrPackagep); iterateChildren(nodep); nodep->user4(true); } else { // !doit @@ -850,7 +850,7 @@ class LinkDotFindVisitor final : public AstNVisitor { VSymEnt* upperSymp = m_curSymp; m_scope = m_scope + "." + nodep->name(); m_curSymp = m_modSymp - = m_statep->insertBlock(upperSymp, nodep->name(), nodep, m_packagep); + = m_statep->insertBlock(upperSymp, nodep->name(), nodep, m_classOrPackagep); m_statep->insertMap(m_curSymp, m_scope); UINFO(9, "New module scope " << m_curSymp << endl); // @@ -965,7 +965,8 @@ class LinkDotFindVisitor final : public AstNVisitor { { m_blockNum = 0; m_blockp = nodep; - m_curSymp = m_statep->insertBlock(m_curSymp, nodep->name(), nodep, m_packagep); + m_curSymp + = m_statep->insertBlock(m_curSymp, nodep->name(), nodep, m_classOrPackagep); m_curSymp->fallbackp(oldCurSymp); // Iterate iterateChildren(nodep); @@ -982,8 +983,9 @@ class LinkDotFindVisitor final : public AstNVisitor { VSymEnt* const oldCurSymp = m_curSymp; { // Change to appropriate package if extern declaration (vs definition) - if (nodep->packagep()) { - AstClassOrPackageRef* cpackagerefp = VN_CAST(nodep->packagep(), ClassOrPackageRef); + if (nodep->classOrPackagep()) { + AstClassOrPackageRef* cpackagerefp + = VN_CAST(nodep->classOrPackagep(), ClassOrPackageRef); if (!cpackagerefp) { nodep->v3warn(E_UNSUPPORTED, "Unsupported: extern function definition with class-in-class"); @@ -998,14 +1000,14 @@ class LinkDotFindVisitor final : public AstNVisitor { nodep->unlinkFrBack(); classp->addStmtp(nodep); nodep->isExternDef(true); // So we check there's a matching extern - nodep->packagep()->unlinkFrBack()->deleteTree(); + nodep->classOrPackagep()->unlinkFrBack()->deleteTree(); } } } } // Create symbol table for the task's vars string name = string{nodep->isExternProto() ? "extern " : ""} + nodep->name(); - auto pkgp = m_packagep; + auto pkgp = m_classOrPackagep; // Set the class as package for static class methods if (nodep->lifetime().isStatic() && VN_IS(m_curSymp->nodep(), Class)) { pkgp = VN_CAST(m_curSymp->nodep(), Class); @@ -1033,7 +1035,8 @@ class LinkDotFindVisitor final : public AstNVisitor { newvarp->attrIsolateAssign(nodep->attrIsolateAssign()); nodep->addFvarp(newvarp); // Explicit insert required, as the var name shadows the upper level's task name - m_statep->insertSym(m_curSymp, newvarp->name(), newvarp, nullptr /*packagep*/); + m_statep->insertSym(m_curSymp, newvarp->name(), newvarp, + nullptr /*classOrPackagep*/); } m_ftaskp = nodep; iterateChildren(nodep); @@ -1150,11 +1153,13 @@ class LinkDotFindVisitor final : public AstNVisitor { } } } - VSymEnt* insp = m_statep->insertSym(m_curSymp, nodep->name(), nodep, m_packagep); + VSymEnt* insp + = m_statep->insertSym(m_curSymp, nodep->name(), nodep, m_classOrPackagep); if (m_statep->forPrimary() && nodep->isGParam()) { m_paramNum++; - VSymEnt* symp = m_statep->insertSym( - m_curSymp, "__paramNumber" + cvtToStr(m_paramNum), nodep, m_packagep); + VSymEnt* symp + = m_statep->insertSym(m_curSymp, "__paramNumber" + cvtToStr(m_paramNum), + nodep, m_classOrPackagep); symp->exported(false); } AstIfaceRefDType* ifacerefp = LinkDotState::ifaceRefFromArray(nodep->subDTypep()); @@ -1169,7 +1174,7 @@ class LinkDotFindVisitor final : public AstNVisitor { virtual void visit(AstTypedef* nodep) override { UASSERT_OBJ(m_curSymp, nodep, "Typedef not under module/package/$unit"); iterateChildren(nodep); - m_statep->insertSym(m_curSymp, nodep->name(), nodep, m_packagep); + m_statep->insertSym(m_curSymp, nodep->name(), nodep, m_classOrPackagep); } virtual void visit(AstTypedefFwd* nodep) override { UASSERT_OBJ(m_curSymp, nodep, "Typedef not under module/package/$unit"); @@ -1180,7 +1185,7 @@ class LinkDotFindVisitor final : public AstNVisitor { virtual void visit(AstParamTypeDType* nodep) override { UASSERT_OBJ(m_curSymp, nodep, "Parameter type not under module/package/$unit"); iterateChildren(nodep); - m_statep->insertSym(m_curSymp, nodep->name(), nodep, m_packagep); + m_statep->insertSym(m_curSymp, nodep->name(), nodep, m_classOrPackagep); } virtual void visit(AstCFunc* nodep) override { // For dotted resolution, ignore all AstVars under functions, otherwise shouldn't exist @@ -1223,7 +1228,7 @@ class LinkDotFindVisitor final : public AstNVisitor { ins = true; } } - if (ins) m_statep->insertSym(m_curSymp, nodep->name(), nodep, m_packagep); + if (ins) m_statep->insertSym(m_curSymp, nodep->name(), nodep, m_classOrPackagep); } virtual void visit(AstPackageImport* nodep) override { UINFO(4, " Link: " << nodep << endl); @@ -1296,7 +1301,7 @@ class LinkDotFindVisitor final : public AstNVisitor { { ++m_modWithNum; m_curSymp = m_statep->insertBlock(m_curSymp, "__Vwith" + cvtToStr(m_modWithNum), nodep, - m_packagep); + m_classOrPackagep); m_curSymp->fallbackp(oldCurSymp); UASSERT_OBJ(nodep->indexArgRefp(), nodep, "Missing lambda argref"); UASSERT_OBJ(nodep->valueArgRefp(), nodep, "Missing lambda argref"); @@ -1427,7 +1432,7 @@ private: refp->user4(true); VSymEnt* symp = m_statep->insertSym(m_statep->getNodeSym(m_modp), "__pinNumber" + cvtToStr(nodep->pinNum()), refp, - nullptr /*packagep*/); + nullptr /*classOrPackagep*/); symp->exported(false); } // Ports not needed any more @@ -1835,7 +1840,7 @@ private: modp->addStmtp(newp); // Link it to signal list, must add the variable under the module; // current scope might be lower now - m_statep->insertSym(moduleSymp, newp->name(), newp, nullptr /*packagep*/); + m_statep->insertSym(moduleSymp, newp->name(), newp, nullptr /*classOrPackagep*/); } } AstVar* foundToVarp(const VSymEnt* symp, AstNode* nodep, VAccess access) { @@ -2119,7 +2124,7 @@ private: bool allowVar = false; if (m_ds.m_dotPos == DP_PACKAGE) { // {package}::{a} - AstNodeModule* packagep = nullptr; + AstNodeModule* classOrPackagep = nullptr; expectWhat = "scope/variable"; allowScope = true; allowVar = true; @@ -2127,9 +2132,9 @@ private: "Bad package link"); AstClassOrPackageRef* cpackagerefp = VN_CAST(m_ds.m_dotp->lhsp(), ClassOrPackageRef); - packagep = cpackagerefp->classOrPackagep(); - UASSERT_OBJ(packagep, m_ds.m_dotp->lhsp(), "Bad package link"); - m_ds.m_dotSymp = m_statep->getNodeSym(packagep); + classOrPackagep = cpackagerefp->classOrPackagep(); + UASSERT_OBJ(classOrPackagep, m_ds.m_dotp->lhsp(), "Bad package link"); + m_ds.m_dotSymp = m_statep->getNodeSym(classOrPackagep); m_ds.m_dotPos = DP_SCOPE; } else if (m_ds.m_dotPos == DP_SCOPE) { // {a}.{b}, where {a} maybe a module name @@ -2246,7 +2251,7 @@ private: AstVarRef* refp = new AstVarRef(nodep->fileline(), varp, VAccess::READ); // lvalue'ness computed later - refp->packagep(foundp->packagep()); + refp->classOrPackagep(foundp->classOrPackagep()); newp = refp; } UINFO(9, " new " << newp << endl); @@ -2305,7 +2310,7 @@ private: } else if (AstEnumItem* valuep = VN_CAST(foundp->nodep(), EnumItem)) { if (allowVar) { AstNode* newp - = new AstEnumItemRef(nodep->fileline(), valuep, foundp->packagep()); + = new AstEnumItemRef(nodep->fileline(), valuep, foundp->classOrPackagep()); nodep->replaceWith(newp); VL_DO_DANGLING(pushDeletep(nodep), nodep); ok = true; @@ -2379,7 +2384,7 @@ private: if (AstVar* varp = foundp ? foundToVarp(foundp, nodep, nodep->access()) : nullptr) { nodep->varp(varp); // Generally set by parse, but might be an import - nodep->packagep(foundp->packagep()); + nodep->classOrPackagep(foundp->classOrPackagep()); } if (!nodep->varp()) { nodep->v3error("Can't find definition of signal, again: " << nodep->prettyNameQ()); @@ -2506,7 +2511,7 @@ private: nodep->v3warn(E_UNSUPPORTED, "Unsupported: parameterized packages"); } UASSERT_OBJ(cpackagerefp->classOrPackagep(), m_ds.m_dotp->lhsp(), "Bad package link"); - nodep->packagep(cpackagerefp->classOrPackagep()); + nodep->classOrPackagep(cpackagerefp->classOrPackagep()); m_ds.m_dotPos = DP_SCOPE; m_ds.m_dotp = nullptr; } else if (m_ds.m_dotp && m_ds.m_dotPos == DP_FINAL) { @@ -2536,7 +2541,7 @@ private: } else { checkNoDot(nodep); } - if (nodep->packagep() && nodep->taskp()) { + if (nodep->classOrPackagep() && nodep->taskp()) { // References into packages don't care about cell hierarchy. } else if (!m_modSymp) { // Module that is not in hierarchy. We'll be dead code eliminating it later. @@ -2552,8 +2557,8 @@ private: // of same name under a subtask isn't a relevant hit however a // function under a begin/end is. So we want begins, but not // the function - if (nodep->packagep()) { // Look only in specified package - dotSymp = m_statep->getNodeSym(nodep->packagep()); + if (nodep->classOrPackagep()) { // Look only in specified package + dotSymp = m_statep->getNodeSym(nodep->classOrPackagep()); } else { if (nodep->inlinedDots() != "") { // Correct for current scope // Dotted lookup is always relative to module, as maybe @@ -2579,7 +2584,7 @@ private: = foundp ? VN_CAST(foundp->nodep(), NodeFTask) : nullptr; // Maybe nullptr if (taskp) { nodep->taskp(taskp); - nodep->packagep(foundp->packagep()); + nodep->classOrPackagep(foundp->classOrPackagep()); UINFO(7, " Resolved " << nodep << endl); // Also prints taskp } else { // Note ParseRef has similar error handling/message output @@ -2812,7 +2817,7 @@ private: if (!nodep->findMember(it->first)) { if (AstEnumItem* aitemp = VN_CAST(itemp, EnumItem)) { AstEnumItemRef* newp = new AstEnumItemRef(aitemp->fileline(), aitemp, - it->second->packagep()); + it->second->classOrPackagep()); UINFO(8, "Class import noderef '" << it->first << "' " << newp << endl); nodep->addMembersp(newp); } @@ -2825,16 +2830,13 @@ private: if (nodep->user3SetOnce()) return; if (AstNode* cpackagep = nodep->classOrPackageOpp()) { if (AstClassOrPackageRef* cpackagerefp = VN_CAST(cpackagep, ClassOrPackageRef)) { - if (cpackagerefp->packagep()) { - nodep->packagep(cpackagerefp->packagep()); - } else { - nodep->packagep(cpackagerefp->classOrPackagep()); - if (!VN_IS(nodep->packagep(), Class) && !VN_IS(nodep->packagep(), Package)) { - cpackagerefp->v3error( - "'::' expected to reference a class/package but referenced " - << nodep->packagep()->prettyTypeName() << '\n' - << cpackagerefp->warnMore() + "... Suggest '.' instead of '::'"); - } + nodep->classOrPackagep(cpackagerefp->classOrPackagep()); + if (!VN_IS(nodep->classOrPackagep(), Class) + && !VN_IS(nodep->classOrPackagep(), Package)) { + cpackagerefp->v3error( + "'::' expected to reference a class/package but referenced " + << nodep->classOrPackagep()->prettyTypeName() << '\n' + << cpackagerefp->warnMore() + "... Suggest '.' instead of '::'"); } } else { cpackagep->v3warn(E_UNSUPPORTED, @@ -2847,9 +2849,10 @@ private: if (m_ds.m_dotp && m_ds.m_dotPos == DP_PACKAGE) { UASSERT_OBJ(VN_IS(m_ds.m_dotp->lhsp(), ClassOrPackageRef), m_ds.m_dotp->lhsp(), "Bad package link"); - UASSERT_OBJ(VN_CAST(m_ds.m_dotp->lhsp(), ClassOrPackageRef)->packagep(), + UASSERT_OBJ(VN_CAST(m_ds.m_dotp->lhsp(), ClassOrPackageRef)->classOrPackagep(), m_ds.m_dotp->lhsp(), "Bad package link"); - nodep->packagep(VN_CAST(m_ds.m_dotp->lhsp(), ClassOrPackageRef)->packagep()); + nodep->classOrPackagep( + VN_CAST(m_ds.m_dotp->lhsp(), ClassOrPackageRef)->classOrPackagep()); m_ds.m_dotPos = DP_SCOPE; m_ds.m_dotp = nullptr; } else { @@ -2858,21 +2861,21 @@ private: if (nodep->typeofp()) { // Really is a typeof not a reference } else if (!nodep->typedefp() && !nodep->subDTypep()) { VSymEnt* foundp; - if (nodep->packagep()) { - foundp = m_statep->getNodeSym(nodep->packagep())->findIdFlat(nodep->name()); + if (nodep->classOrPackagep()) { + foundp = m_statep->getNodeSym(nodep->classOrPackagep())->findIdFlat(nodep->name()); } else { foundp = m_curSymp->findIdFallback(nodep->name()); } if (AstTypedef* defp = foundp ? VN_CAST(foundp->nodep(), Typedef) : nullptr) { nodep->typedefp(defp); - nodep->packagep(foundp->packagep()); + nodep->classOrPackagep(foundp->classOrPackagep()); } else if (AstParamTypeDType* defp = foundp ? VN_CAST(foundp->nodep(), ParamTypeDType) : nullptr) { nodep->refDTypep(defp); - nodep->packagep(foundp->packagep()); + nodep->classOrPackagep(foundp->classOrPackagep()); } else if (AstClass* defp = foundp ? VN_CAST(foundp->nodep(), Class) : nullptr) { AstClassRefDType* newp = new AstClassRefDType(nodep->fileline(), defp); - newp->packagep(foundp->packagep()); + newp->classOrPackagep(foundp->classOrPackagep()); nodep->replaceWith(newp); VL_DO_DANGLING(nodep->deleteTree(), nodep); return; diff --git a/src/V3Scope.cpp b/src/V3Scope.cpp index a1374541e..6e050be7b 100644 --- a/src/V3Scope.cpp +++ b/src/V3Scope.cpp @@ -68,8 +68,8 @@ private: for (const auto& itr : m_varRefScopes) { AstVarRef* nodep = itr.first; AstScope* scopep = itr.second; - if (nodep->packagep() && !nodep->varp()->isClassMember()) { - const auto it2 = m_packageScopes.find(nodep->packagep()); + if (nodep->classOrPackagep() && !nodep->varp()->isClassMember()) { + const auto it2 = m_packageScopes.find(nodep->classOrPackagep()); UASSERT_OBJ(it2 != m_packageScopes.end(), nodep, "Can't locate package scope"); scopep = it2->second; } @@ -365,7 +365,7 @@ private: virtual void visit(AstNodeFTaskRef* nodep) override { // The crossrefs are dealt with in V3LinkDot UINFO(9, " Old pkg-taskref " << nodep << endl); - if (nodep->packagep()) { + if (nodep->classOrPackagep()) { // Point to the clone UASSERT_OBJ(nodep->taskp(), nodep, "Unlinked"); AstNodeFTask* newp = VN_CAST(nodep->taskp()->user2p(), NodeFTask); diff --git a/src/V3SplitVar.cpp b/src/V3SplitVar.cpp index e3663a476..c949e3478 100644 --- a/src/V3SplitVar.cpp +++ b/src/V3SplitVar.cpp @@ -982,7 +982,7 @@ class SplitPackedVarVisitor final : public AstNVisitor, public SplitVarImpl { const auto refit = m_refs.find(varp); if (refit == m_refs.end()) return; // variable without split_var metacomment UASSERT_OBJ(varp->attrSplitVar(), varp, "split_var attribute must be attached"); - UASSERT_OBJ(!nodep->packagep(), nodep, + UASSERT_OBJ(!nodep->classOrPackagep(), nodep, "variable in package must have been dropped beforehand."); const AstBasicDType* basicp = refit->second.basicp(); refit->second.append(PackedVarRefEntry(nodep, basicp->lsb(), varp->width()), diff --git a/src/V3SymTable.h b/src/V3SymTable.h index 68a2296f0..512bdedf1 100644 --- a/src/V3SymTable.h +++ b/src/V3SymTable.h @@ -46,7 +46,7 @@ class VSymEnt final { AstNode* m_nodep; // Node that entry belongs to VSymEnt* m_fallbackp; // Table "above" this one in name scope, for fallback resolution VSymEnt* m_parentp; // Table that created this table, dot notation needed to resolve into it - AstNodeModule* m_packagep; // Package node is in (for V3LinkDot, unused here) + AstNodeModule* m_classOrPackagep; // Package node is in (for V3LinkDot, unused here) string m_symPrefix; // String to prefix symbols with (for V3LinkDot, unused here) bool m_exported; // Allow importing bool m_imported; // Was imported @@ -100,7 +100,7 @@ public: m_nodep = reinterpret_cast(1); m_fallbackp = reinterpret_cast(1); m_parentp = reinterpret_cast(1); - m_packagep = reinterpret_cast(1); + m_classOrPackagep = reinterpret_cast(1); #endif } #if defined(VL_DEBUG) && !defined(VL_LEAK_CHECKS) @@ -111,8 +111,8 @@ public: VSymEnt* fallbackp() const { return m_fallbackp; } void parentp(VSymEnt* entp) { m_parentp = entp; } VSymEnt* parentp() const { return m_parentp; } - void packagep(AstNodeModule* entp) { m_packagep = entp; } - AstNodeModule* packagep() const { return m_packagep; } + void classOrPackagep(AstNodeModule* entp) { m_classOrPackagep = entp; } + AstNodeModule* classOrPackagep() const { return m_classOrPackagep; } AstNode* nodep() const { return m_nodep; } string symPrefix() const { return m_symPrefix; } void symPrefix(const string& name) { m_symPrefix = name; } @@ -337,7 +337,7 @@ inline VSymEnt::VSymEnt(VSymGraph* graphp, AstNode* nodep) // by an earlier search insertion. m_fallbackp = nullptr; m_parentp = nullptr; - m_packagep = nullptr; + m_classOrPackagep = nullptr; m_exported = true; m_imported = false; graphp->pushNewEnt(this); @@ -347,7 +347,7 @@ inline VSymEnt::VSymEnt(VSymGraph* graphp, const VSymEnt* symp) : m_nodep(symp->m_nodep) { m_fallbackp = symp->m_fallbackp; m_parentp = symp->m_parentp; - m_packagep = symp->m_packagep; + m_classOrPackagep = symp->m_classOrPackagep; m_exported = symp->m_exported; m_imported = symp->m_imported; graphp->pushNewEnt(this); diff --git a/src/V3Width.cpp b/src/V3Width.cpp index ae0c2731f..08ea024a3 100644 --- a/src/V3Width.cpp +++ b/src/V3Width.cpp @@ -1415,7 +1415,7 @@ private: = dimensionVarp(nodep->fromp()->dtypep(), nodep->attrType(), msbdim); AstNode* dimp = nodep->dimp()->unlinkFrBack(); AstVarRef* varrefp = new AstVarRef(nodep->fileline(), varp, VAccess::READ); - varrefp->packagep(v3Global.rootp()->dollarUnitPkgAddp()); + varrefp->classOrPackagep(v3Global.rootp()->dollarUnitPkgAddp()); AstNode* newp = new AstArraySel(nodep->fileline(), varrefp, dimp); nodep->replaceWith(newp); VL_DO_DANGLING(nodep->deleteTree(), nodep); @@ -2516,7 +2516,7 @@ private: int selwidth = V3Number::log2b(msbdim) + 1; // Width to address a bit AstVar* varp = enumVarp(adtypep, attrType, (1ULL << selwidth) - 1); AstVarRef* varrefp = new AstVarRef(nodep->fileline(), varp, VAccess::READ); - varrefp->packagep(v3Global.rootp()->dollarUnitPkgAddp()); + varrefp->classOrPackagep(v3Global.rootp()->dollarUnitPkgAddp()); AstNode* newp = new AstArraySel( nodep->fileline(), varrefp, // Select in case widths are @@ -2886,7 +2886,7 @@ private: newp = new AstFuncRef(nodep->fileline(), ftaskp->name(), argsp); } newp->taskp(ftaskp); - newp->packagep(classp); + newp->classOrPackagep(classp); nodep->replaceWith(newp); VL_DO_DANGLING(nodep->deleteTree(), nodep); } else { @@ -3101,7 +3101,7 @@ private: UASSERT_OBJ(classp, nodep, "Unlinked"); if (AstNodeFTask* ftaskp = VN_CAST(classp->findMember("new"), Func)) { nodep->taskp(ftaskp); - nodep->packagep(classp); + nodep->classOrPackagep(classp); } else { // Either made explicitly or V3LinkDot made implicitly classp->v3fatalSrc("Can't find class's new"); diff --git a/src/verilog.y b/src/verilog.y index 8ca424f3c..515bda060 100644 --- a/src/verilog.y +++ b/src/verilog.y @@ -3873,7 +3873,7 @@ taskId: // | packageClassScope id { $$ = new AstTask($$, *$2, nullptr); - $$->packagep($1); + $$->classOrPackagep($1); SYMP->pushNewUnderNodeOrCurrent($$, $1); } ; @@ -3912,7 +3912,7 @@ funcIdNew: // IEEE: from class_constructor_declaration SYMP->pushNewUnder($$, nullptr); } | packageClassScopeNoId yNEW__PAREN { $$ = new AstFunc($2, "new", nullptr, nullptr); - $$->packagep($1); + $$->classOrPackagep($1); $$->isConstructor(true); SYMP->pushNewUnderNodeOrCurrent($$, $1); } ; @@ -3934,7 +3934,7 @@ fIdScoped: // IEEE: part of function_body_declaration/task_body_declarat { $$ = $1; $$ = $1; $$ = new AstFunc($$, *$2, nullptr, nullptr); - $$->packagep($1); } + $$->classOrPackagep($1); } ; tfGuts: