Internals: Rename packagep(). No functional change.
This commit is contained in:
parent
b0cb43b2f2
commit
e1c45440fc
18
src/V3Ast.h
18
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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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()) {
|
||||
|
|
|
|||
|
|
@ -303,7 +303,7 @@ class AstClass final : public AstNodeModule {
|
|||
typedef std::map<const string, AstNode*> 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<const AstClassRefDType*>(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<const AstRefDType*>(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 {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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()),
|
||||
|
|
|
|||
|
|
@ -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<AstNode*>(1);
|
||||
m_fallbackp = reinterpret_cast<VSymEnt*>(1);
|
||||
m_parentp = reinterpret_cast<VSymEnt*>(1);
|
||||
m_packagep = reinterpret_cast<AstNodeModule*>(1);
|
||||
m_classOrPackagep = reinterpret_cast<AstNodeModule*>(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);
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -3873,7 +3873,7 @@ taskId<ftaskp>:
|
|||
//
|
||||
| packageClassScope id
|
||||
{ $$ = new AstTask($<fl>$, *$2, nullptr);
|
||||
$$->packagep($1);
|
||||
$$->classOrPackagep($1);
|
||||
SYMP->pushNewUnderNodeOrCurrent($$, $<scp>1); }
|
||||
;
|
||||
|
||||
|
|
@ -3912,7 +3912,7 @@ funcIdNew<ftaskp>: // IEEE: from class_constructor_declaration
|
|||
SYMP->pushNewUnder($$, nullptr); }
|
||||
| packageClassScopeNoId yNEW__PAREN
|
||||
{ $$ = new AstFunc($<fl>2, "new", nullptr, nullptr);
|
||||
$$->packagep($1);
|
||||
$$->classOrPackagep($1);
|
||||
$$->isConstructor(true);
|
||||
SYMP->pushNewUnderNodeOrCurrent($$, $<scp>1); }
|
||||
;
|
||||
|
|
@ -3934,7 +3934,7 @@ fIdScoped<funcp>: // IEEE: part of function_body_declaration/task_body_declarat
|
|||
{ $<fl>$ = $<fl>1;
|
||||
$<scp>$ = $<scp>1;
|
||||
$$ = new AstFunc($<fl>$, *$2, nullptr, nullptr);
|
||||
$$->packagep($1); }
|
||||
$$->classOrPackagep($1); }
|
||||
;
|
||||
|
||||
tfGuts<nodep>:
|
||||
|
|
|
|||
Loading…
Reference in New Issue