Internals: Rename AstPackageRef as may point to class.
This commit is contained in:
parent
1194dbf19c
commit
bb8899f307
|
|
@ -1493,12 +1493,12 @@ void AstParseRef::dump(std::ostream& str) const {
|
|||
this->AstNode::dump(str);
|
||||
str << " [" << expect().ascii() << "]";
|
||||
}
|
||||
void AstPackageRef::dump(std::ostream& str) const {
|
||||
void AstClassOrPackageRef::dump(std::ostream& str) const {
|
||||
this->AstNode::dump(str);
|
||||
if (packagep()) { str << " pkg=" << nodeAddr(packagep()); }
|
||||
if (classOrPackagep()) { str << " cpkg=" << nodeAddr(classOrPackagep()); }
|
||||
str << " -> ";
|
||||
if (packagep()) {
|
||||
packagep()->dump(str);
|
||||
if (classOrPackagep()) {
|
||||
classOrPackagep()->dump(str);
|
||||
} else {
|
||||
str << "UNLINKED";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2891,29 +2891,33 @@ public:
|
|||
void ftaskrefp(AstNodeFTaskRef* nodep) { setNOp2p(nodep); } // op2 = Function/task reference
|
||||
};
|
||||
|
||||
class AstPackageRef : public AstNode {
|
||||
class AstClassOrPackageRef : public AstNode {
|
||||
private:
|
||||
AstPackage* m_packagep; // Package hierarchy
|
||||
AstNode* m_classOrPackagep; // Package hierarchy
|
||||
public:
|
||||
AstPackageRef(FileLine* fl, AstPackage* packagep)
|
||||
AstClassOrPackageRef(FileLine* fl, AstNode* classOrPackagep)
|
||||
: ASTGEN_SUPER(fl)
|
||||
, m_packagep(packagep) {}
|
||||
ASTNODE_NODE_FUNCS(PackageRef)
|
||||
, m_classOrPackagep(classOrPackagep) {}
|
||||
ASTNODE_NODE_FUNCS(ClassOrPackageRef)
|
||||
// METHODS
|
||||
virtual const char* broken() const {
|
||||
BROKEN_RTN(!m_packagep || !m_packagep->brokeExists());
|
||||
BROKEN_RTN(!m_classOrPackagep || !m_classOrPackagep->brokeExists());
|
||||
return NULL;
|
||||
}
|
||||
virtual void cloneRelink() {
|
||||
if (m_packagep && m_packagep->clonep()) { m_packagep = m_packagep->clonep(); }
|
||||
if (m_classOrPackagep && m_classOrPackagep->clonep()) {
|
||||
m_classOrPackagep = m_classOrPackagep->clonep();
|
||||
}
|
||||
}
|
||||
virtual bool same(const AstNode* samep) const {
|
||||
return (m_packagep == static_cast<const AstPackageRef*>(samep)->m_packagep);
|
||||
return (m_classOrPackagep
|
||||
== static_cast<const AstClassOrPackageRef*>(samep)->m_classOrPackagep);
|
||||
}
|
||||
virtual V3Hash sameHash() const { return V3Hash(m_packagep); }
|
||||
virtual V3Hash sameHash() const { return V3Hash(m_classOrPackagep); }
|
||||
virtual void dump(std::ostream& str = std::cout) const;
|
||||
AstPackage* packagep() const { return m_packagep; }
|
||||
void packagep(AstPackage* nodep) { m_packagep = nodep; }
|
||||
AstNode* classOrPackagep() const { return m_classOrPackagep; }
|
||||
AstPackage* packagep() const { return VN_CAST(classOrPackagep(), Package); }
|
||||
void classOrPackagep(AstNode* nodep) { m_classOrPackagep = nodep; }
|
||||
};
|
||||
|
||||
class AstDot : public AstNode {
|
||||
|
|
@ -2931,7 +2935,7 @@ public:
|
|||
// For parser, make only if non-null package
|
||||
static AstNode* newIfPkg(FileLine* fl, AstPackage* packagep, AstNode* rhsp) {
|
||||
if (!packagep) return rhsp;
|
||||
return new AstDot(fl, true, new AstPackageRef(fl, packagep), rhsp);
|
||||
return new AstDot(fl, true, new AstClassOrPackageRef(fl, packagep), rhsp);
|
||||
}
|
||||
virtual void dump(std::ostream& str) const;
|
||||
virtual string emitVerilog() { V3ERROR_NA_RETURN(""); }
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
// The following nodes have package pointers and are cleaned up here:
|
||||
// AstRefDType, AstEnumItemRef, AstNodeVarRef, AstNodeFTask
|
||||
// These have packagep but will not exist at this stage
|
||||
// AstPackageImport, AstDot, AstPackageRef
|
||||
// AstPackageImport, AstDot, AstClassOrPackageRef
|
||||
//
|
||||
// Note on packagep: After the V3Scope/V3LinkDotScoped stage, package links
|
||||
// are no longer used, but their presence prevents us from removing empty
|
||||
|
|
|
|||
|
|
@ -1951,7 +1951,7 @@ private:
|
|||
m_ds.m_dotPos = DP_SCOPE;
|
||||
|
||||
// m_ds.m_dotText communicates the cell prefix between stages
|
||||
if (VN_IS(nodep->lhsp(), PackageRef)) {
|
||||
if (VN_IS(nodep->lhsp(), ClassOrPackageRef)) {
|
||||
// if (!start) { nodep->lhsp()->v3error("Package reference may not be embedded in
|
||||
// dotted reference"); m_ds.m_dotErr=true; }
|
||||
m_ds.m_dotPos = DP_PACKAGE;
|
||||
|
|
@ -2047,9 +2047,9 @@ private:
|
|||
expectWhat = "scope/variable";
|
||||
allowScope = true;
|
||||
allowVar = true;
|
||||
UASSERT_OBJ(VN_IS(m_ds.m_dotp->lhsp(), PackageRef), m_ds.m_dotp->lhsp(),
|
||||
UASSERT_OBJ(VN_IS(m_ds.m_dotp->lhsp(), ClassOrPackageRef), m_ds.m_dotp->lhsp(),
|
||||
"Bad package link");
|
||||
packagep = VN_CAST(m_ds.m_dotp->lhsp(), PackageRef)->packagep();
|
||||
packagep = VN_CAST(m_ds.m_dotp->lhsp(), ClassOrPackageRef)->packagep();
|
||||
UASSERT_OBJ(packagep, m_ds.m_dotp->lhsp(), "Bad package link");
|
||||
m_ds.m_dotSymp = m_statep->getNodeSym(packagep);
|
||||
m_ds.m_dotPos = DP_SCOPE;
|
||||
|
|
@ -2399,11 +2399,11 @@ private:
|
|||
if (nodep->user3SetOnce()) return;
|
||||
UINFO(8, " " << nodep << endl);
|
||||
if (m_ds.m_dotp && m_ds.m_dotPos == DP_PACKAGE) {
|
||||
UASSERT_OBJ(VN_IS(m_ds.m_dotp->lhsp(), PackageRef), m_ds.m_dotp->lhsp(),
|
||||
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(), PackageRef)->packagep(), m_ds.m_dotp->lhsp(),
|
||||
"Bad package link");
|
||||
nodep->packagep(VN_CAST(m_ds.m_dotp->lhsp(), PackageRef)->packagep());
|
||||
UASSERT_OBJ(VN_CAST(m_ds.m_dotp->lhsp(), ClassOrPackageRef)->packagep(),
|
||||
m_ds.m_dotp->lhsp(), "Bad package link");
|
||||
nodep->packagep(VN_CAST(m_ds.m_dotp->lhsp(), ClassOrPackageRef)->packagep());
|
||||
m_ds.m_dotPos = DP_SCOPE;
|
||||
m_ds.m_dotp = NULL;
|
||||
} else if (m_ds.m_dotp && m_ds.m_dotPos == DP_FINAL) {
|
||||
|
|
@ -2668,11 +2668,11 @@ private:
|
|||
// Resolve its reference
|
||||
if (nodep->user3SetOnce()) return;
|
||||
if (m_ds.m_dotp && m_ds.m_dotPos == DP_PACKAGE) {
|
||||
UASSERT_OBJ(VN_IS(m_ds.m_dotp->lhsp(), PackageRef), m_ds.m_dotp->lhsp(),
|
||||
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(), PackageRef)->packagep(), m_ds.m_dotp->lhsp(),
|
||||
"Bad package link");
|
||||
nodep->packagep(VN_CAST(m_ds.m_dotp->lhsp(), PackageRef)->packagep());
|
||||
UASSERT_OBJ(VN_CAST(m_ds.m_dotp->lhsp(), ClassOrPackageRef)->packagep(),
|
||||
m_ds.m_dotp->lhsp(), "Bad package link");
|
||||
nodep->packagep(VN_CAST(m_ds.m_dotp->lhsp(), ClassOrPackageRef)->packagep());
|
||||
m_ds.m_dotPos = DP_SCOPE;
|
||||
m_ds.m_dotp = NULL;
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -139,7 +139,6 @@ struct V3ParseBisonYYSType {
|
|||
AstSenItem* senitemp;
|
||||
AstNodeVarRef* varnodep;
|
||||
AstPackage* packagep;
|
||||
AstPackageRef* packagerefp;
|
||||
AstParseRef* parserefp;
|
||||
AstPatMember* patmemberp;
|
||||
AstPattern* patternp;
|
||||
|
|
|
|||
|
|
@ -2526,7 +2526,7 @@ delay_control<nodep>: //== IEEE: delay_control
|
|||
|
||||
delay_value<nodep>: // ==IEEE:delay_value
|
||||
// // IEEE: ps_identifier
|
||||
packageClassScopeE varRefBase { $$ = $2; $2->packagep($1); }
|
||||
packageClassScopeE varRefBase { $$ = AstDot::newIfPkg($<fl>2, CAST_PACKAGE_CLASS($1), $2); }
|
||||
| yaINTNUM { $$ = new AstConst($<fl>1, *$1); }
|
||||
| yaFLOATNUM { $$ = new AstConst($<fl>1, AstConst::RealDouble(), $1); }
|
||||
| timeNumAdjusted { $$ = $1; }
|
||||
|
|
|
|||
Loading…
Reference in New Issue