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