Compute struct/union/enum names from surrounding typedefs.
This commit is contained in:
parent
57fbf38fb2
commit
8b738c0022
|
|
@ -1809,6 +1809,7 @@ private:
|
|||
// TYPES
|
||||
typedef std::map<string,AstMemberDType*> MemberNameMap;
|
||||
// MEMBERS
|
||||
string m_name; // Name from upper typedef, if any
|
||||
bool m_packed;
|
||||
bool m_isFourstate;
|
||||
MemberNameMap m_members;
|
||||
|
|
@ -1837,6 +1838,8 @@ public:
|
|||
virtual bool similarDType(AstNodeDType* samep) const {
|
||||
return this==samep; // We don't compare members, require exact equivalence
|
||||
}
|
||||
virtual string name() const { return m_name; }
|
||||
void name(const string& flag) { m_name = flag; }
|
||||
AstMemberDType* membersp() const { return VN_CAST(op1p(), MemberDType); } // op1 = AstMember list
|
||||
void addMembersp(AstNode* nodep) { addNOp1p(nodep); }
|
||||
bool packed() const { return m_packed; }
|
||||
|
|
|
|||
|
|
@ -779,6 +779,7 @@ class AstEnumDType : public AstNodeDType {
|
|||
// Parents: TYPEDEF/MODULE
|
||||
// Children: ENUMVALUEs
|
||||
private:
|
||||
string m_name; // Name from upper typedef, if any
|
||||
AstNodeDType* m_refDTypep; // Elements are of this type after V3Width
|
||||
int m_uniqueNum;
|
||||
public:
|
||||
|
|
@ -809,6 +810,8 @@ public:
|
|||
void refDTypep(AstNodeDType* nodep) { m_refDTypep = nodep; }
|
||||
virtual AstNodeDType* virtRefDTypep() const { return m_refDTypep; }
|
||||
virtual void virtRefDTypep(AstNodeDType* nodep) { refDTypep(nodep); }
|
||||
virtual string name() const { return m_name; }
|
||||
void name(const string& flag) { m_name = flag; }
|
||||
AstEnumItem* itemsp() const { return VN_CAST(op2p(), EnumItem); } // op2 = AstEnumItem's
|
||||
void addValuesp(AstNode* nodep) { addOp2p(nodep); }
|
||||
// METHODS
|
||||
|
|
|
|||
|
|
@ -82,6 +82,29 @@ private:
|
|||
}
|
||||
}
|
||||
|
||||
string nameFromTypedef(AstNode* nodep) {
|
||||
// Try to find a name for a typedef'ed enum/struct
|
||||
if (AstTypedef* typedefp = VN_CAST(nodep->backp(), Typedef)) {
|
||||
// Create a name for the enum, to aid debug and tracing
|
||||
// This name is not guaranteed to be globally unique (due to later parameterization)
|
||||
string above;
|
||||
if (m_modp && VN_IS(m_modp, Package)) above = m_modp->name()+"::";
|
||||
else if (m_modp) above = m_modp->name()+".";
|
||||
return above + typedefp->name();
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
void visitIterateNodeDType(AstNodeDType* nodep) {
|
||||
if (!nodep->user1SetOnce()) { // Process only once.
|
||||
cleanFileline(nodep);
|
||||
AstNodeDType* upperDtypep = m_dtypep;
|
||||
m_dtypep = nodep;
|
||||
iterateChildren(nodep);
|
||||
m_dtypep = upperDtypep;
|
||||
}
|
||||
}
|
||||
|
||||
// VISITs
|
||||
virtual void visit(AstNodeFTask* nodep) {
|
||||
if (!nodep->user1SetOnce()) { // Process only once.
|
||||
|
|
@ -102,13 +125,19 @@ private:
|
|||
}
|
||||
}
|
||||
virtual void visit(AstNodeDType* nodep) {
|
||||
if (!nodep->user1SetOnce()) { // Process only once.
|
||||
cleanFileline(nodep);
|
||||
AstNodeDType* upperDtypep = m_dtypep;
|
||||
m_dtypep = nodep;
|
||||
iterateChildren(nodep);
|
||||
m_dtypep = upperDtypep;
|
||||
visitIterateNodeDType(nodep);
|
||||
}
|
||||
virtual void visit(AstEnumDType* nodep) {
|
||||
if (nodep->name() == "") {
|
||||
nodep->name(nameFromTypedef(nodep)); // Might still remain ""
|
||||
}
|
||||
visitIterateNodeDType(nodep);
|
||||
}
|
||||
virtual void visit(AstNodeClassDType* nodep) {
|
||||
if (nodep->name() == "") {
|
||||
nodep->name(nameFromTypedef(nodep)); // Might still remain ""
|
||||
}
|
||||
visitIterateNodeDType(nodep);
|
||||
}
|
||||
virtual void visit(AstEnumItem* nodep) {
|
||||
// Expand ranges
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
<typetable fl="a0">
|
||||
<basicdtype fl="f23" id="4" name="logic" left="31" right="0"/>
|
||||
<basicdtype fl="f8" id="1" name="logic"/>
|
||||
<structdtype fl="f14" id="2">
|
||||
<structdtype fl="f14" id="2" name="m.my_struct">
|
||||
<memberdtype fl="f15" id="5" name="clk" tag="this is clk" sub_dtype_id="6"/>
|
||||
<memberdtype fl="f16" id="7" name="k" sub_dtype_id="8"/>
|
||||
<memberdtype fl="f17" id="9" name="enable" tag="enable" sub_dtype_id="10"/>
|
||||
|
|
|
|||
Loading…
Reference in New Issue