Internals: Rename same() function. No functional change.

This commit is contained in:
Wilson Snyder 2024-11-28 14:37:11 -05:00
parent d165671225
commit 8db9db7e25
9 changed files with 171 additions and 171 deletions

View File

@ -1101,7 +1101,7 @@ bool AstNode::sameTreeIter(const AstNode* node1p, const AstNode* node2p, bool ig
(!node1p->dtypep() && !node2p->dtypep()) || (node1p->dtypep() && node2p->dtypep()), node1p, (!node1p->dtypep() && !node2p->dtypep()) || (node1p->dtypep() && node2p->dtypep()), node1p,
"Comparison of a node with dtypep() with a node without dtypep()\n-node2=" << node2p); "Comparison of a node with dtypep() with a node without dtypep()\n-node2=" << node2p);
if (node1p->dtypep() && !node1p->dtypep()->similarDType(node2p->dtypep())) return false; if (node1p->dtypep() && !node1p->dtypep()->similarDType(node2p->dtypep())) return false;
if (!node1p->same(node2p) || (gateOnly && !node1p->isGateOptimizable())) return false; if (!node1p->sameNode(node2p) || (gateOnly && !node1p->isGateOptimizable())) return false;
return (sameTreeIter(node1p->m_op1p, node2p->m_op1p, false, gateOnly) return (sameTreeIter(node1p->m_op1p, node2p->m_op1p, false, gateOnly)
&& sameTreeIter(node1p->m_op2p, node2p->m_op2p, false, gateOnly) && sameTreeIter(node1p->m_op2p, node2p->m_op2p, false, gateOnly)
&& sameTreeIter(node1p->m_op3p, node2p->m_op3p, false, gateOnly) && sameTreeIter(node1p->m_op3p, node2p->m_op3p, false, gateOnly)

View File

@ -2122,7 +2122,7 @@ protected:
} }
// Use instead isSame(), this is for each Ast* class, and assumes node is of same type // Use instead isSame(), this is for each Ast* class, and assumes node is of same type
virtual bool same(const AstNode*) const { return true; } virtual bool sameNode(const AstNode*) const { return true; }
public: public:
// ACCESSORS // ACCESSORS
@ -2502,7 +2502,7 @@ public:
virtual int instrCount() const { return 0; } virtual int instrCount() const { return 0; }
// Iff node is identical to another node // Iff node is identical to another node
virtual bool isSame(const AstNode* samep) const { virtual bool isSame(const AstNode* samep) const {
return type() == samep->type() && same(samep); return type() == samep->type() && sameNode(samep);
} }
// Iff has a data type; dtype() must be non null // Iff has a data type; dtype() must be non null
virtual bool hasDType() const VL_MT_SAFE { return false; } virtual bool hasDType() const VL_MT_SAFE { return false; }

View File

@ -172,7 +172,7 @@ AstVarRef::AstVarRef(FileLine* fl, AstVarScope* varscp, const VAccess& access)
string AstVarRef::name() const { return varp() ? varp()->name() : "<null>"; } string AstVarRef::name() const { return varp() ? varp()->name() : "<null>"; }
bool AstVarRef::same(const AstVarRef* samep) const { bool AstVarRef::sameNode(const AstVarRef* samep) const {
if (varScopep()) { if (varScopep()) {
return (varScopep() == samep->varScopep() && access() == samep->access()); return (varScopep() == samep->varScopep() && access() == samep->access());
} else { } else {

View File

@ -64,11 +64,11 @@ public:
virtual bool isIntegralOrPacked() const { return !isCompound(); } virtual bool isIntegralOrPacked() const { return !isCompound(); }
// (Slow) recurse down to find basic data type // (Slow) recurse down to find basic data type
virtual AstBasicDType* basicp() const VL_MT_STABLE = 0; virtual AstBasicDType* basicp() const VL_MT_STABLE = 0;
// recurses over typedefs/const/enum to next non-typeref type // (Slow) Recurse over MemberDType|ParamTypeDType|RefDType|ConstDType|EnumDType to other type
virtual AstNodeDType* skipRefp() const VL_MT_STABLE = 0; virtual AstNodeDType* skipRefp() const VL_MT_STABLE = 0;
// recurses over typedefs to next non-typeref-or-const type // (Slow) Recurse over MemberDType|ParamTypeDType|RefDType|EnumDType to ConstDType
virtual AstNodeDType* skipRefToConstp() const = 0; virtual AstNodeDType* skipRefToConstp() const = 0;
// recurses over typedefs/const to next non-typeref-or-enum/struct type // (Slow) Recurse over MemberDType|ParamTypeDType|RefDType|ConstDType to EnumDType
virtual AstNodeDType* skipRefToEnump() const = 0; virtual AstNodeDType* skipRefToEnump() const = 0;
// (Slow) recurses - Structure alignment 1,2,4 or 8 bytes (arrays affect this) // (Slow) recurses - Structure alignment 1,2,4 or 8 bytes (arrays affect this)
virtual int widthAlignBytes() const = 0; virtual int widthAlignBytes() const = 0;
@ -155,7 +155,7 @@ public:
BROKEN_RTN(!((m_refDTypep && !childDTypep()) || (!m_refDTypep && childDTypep()))); BROKEN_RTN(!((m_refDTypep && !childDTypep()) || (!m_refDTypep && childDTypep())));
return nullptr; return nullptr;
} }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
const AstNodeArrayDType* const asamep = VN_DBG_AS(samep, NodeArrayDType); const AstNodeArrayDType* const asamep = VN_DBG_AS(samep, NodeArrayDType);
return (hi() == asamep->hi() && subDTypep() == asamep->subDTypep() return (hi() == asamep->hi() && subDTypep() == asamep->subDTypep()
&& rangenp()->sameTree(asamep->rangenp())); && rangenp()->sameTree(asamep->rangenp()));
@ -311,7 +311,7 @@ public:
BROKEN_RTN(!((m_keyDTypep && !childDTypep()) || (!m_keyDTypep && childDTypep()))); BROKEN_RTN(!((m_keyDTypep && !childDTypep()) || (!m_keyDTypep && childDTypep())));
return nullptr; return nullptr;
} }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
const AstAssocArrayDType* const asamep = VN_DBG_AS(samep, AssocArrayDType); const AstAssocArrayDType* const asamep = VN_DBG_AS(samep, AssocArrayDType);
if (!asamep->subDTypep()) return false; if (!asamep->subDTypep()) return false;
if (!asamep->keyDTypep()) return false; if (!asamep->keyDTypep()) return false;
@ -392,9 +392,9 @@ public:
void dump(std::ostream& str) const override; void dump(std::ostream& str) const override;
void dumpJson(std::ostream& str) const override; void dumpJson(std::ostream& str) const override;
// width/widthMin/numeric compared elsewhere // width/widthMin/numeric compared elsewhere
bool same(const AstNode* samep) const override; bool sameNode(const AstNode* samep) const override;
bool similarDType(const AstNodeDType* samep) const override { bool similarDType(const AstNodeDType* samep) const override {
return type() == samep->type() && same(samep); return type() == samep->type() && sameNode(samep);
} }
string name() const override VL_MT_STABLE { return m.m_keyword.ascii(); } string name() const override VL_MT_STABLE { return m.m_keyword.ascii(); }
string prettyDTypeName(bool full) const override; string prettyDTypeName(bool full) const override;
@ -482,7 +482,7 @@ public:
this->elementsp(elementsp); this->elementsp(elementsp);
} }
ASTGEN_MEMBERS_AstBracketArrayDType; ASTGEN_MEMBERS_AstBracketArrayDType;
bool similarDType(const AstNodeDType* samep) const override { return same(samep); } bool similarDType(const AstNodeDType* samep) const override { return sameNode(samep); }
AstNodeDType* subDTypep() const override VL_MT_STABLE { return childDTypep(); } AstNodeDType* subDTypep() const override VL_MT_STABLE { return childDTypep(); }
// METHODS // METHODS
// Will be removed in V3Width, which relies on this // Will be removed in V3Width, which relies on this
@ -508,11 +508,11 @@ public:
public: public:
ASTGEN_MEMBERS_AstCDType; ASTGEN_MEMBERS_AstCDType;
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
const AstCDType* const asamep = VN_DBG_AS(samep, CDType); const AstCDType* const asamep = VN_DBG_AS(samep, CDType);
return m_name == asamep->m_name; return m_name == asamep->m_name;
} }
bool similarDType(const AstNodeDType* samep) const override { return same(samep); } bool similarDType(const AstNodeDType* samep) const override { return sameNode(samep); }
string name() const override VL_MT_STABLE { return m_name; } string name() const override VL_MT_STABLE { return m_name; }
string prettyDTypeName(bool) const override { return m_name; } string prettyDTypeName(bool) const override { return m_name; }
// METHODS // METHODS
@ -551,12 +551,12 @@ public:
} }
ASTGEN_MEMBERS_AstClassRefDType; ASTGEN_MEMBERS_AstClassRefDType;
// METHODS // METHODS
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
const AstClassRefDType* const asamep = VN_DBG_AS(samep, ClassRefDType); const AstClassRefDType* const asamep = VN_DBG_AS(samep, ClassRefDType);
return (m_classp == asamep->m_classp && m_classOrPackagep == asamep->m_classOrPackagep); return (m_classp == asamep->m_classp && m_classOrPackagep == asamep->m_classOrPackagep);
} }
bool similarDType(const AstNodeDType* samep) const override { bool similarDType(const AstNodeDType* samep) const override {
return this == samep || (type() == samep->type() && same(samep)); return this == samep || (type() == samep->type() && sameNode(samep));
} }
void dump(std::ostream& str = std::cout) const override; void dump(std::ostream& str = std::cout) const override;
void dumpJson(std::ostream& str = std::cout) const override; void dumpJson(std::ostream& str = std::cout) const override;
@ -598,7 +598,7 @@ public:
BROKEN_RTN(!((m_refDTypep && !childDTypep()) || (!m_refDTypep && childDTypep()))); BROKEN_RTN(!((m_refDTypep && !childDTypep()) || (!m_refDTypep && childDTypep())));
return nullptr; return nullptr;
} }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
const AstConstDType* const sp = VN_DBG_AS(samep, ConstDType); const AstConstDType* const sp = VN_DBG_AS(samep, ConstDType);
return (m_refDTypep == sp->m_refDTypep); return (m_refDTypep == sp->m_refDTypep);
} }
@ -677,12 +677,12 @@ public:
, m_uniqueNum(uniqueNumInc()) {} , m_uniqueNum(uniqueNumInc()) {}
ASTGEN_MEMBERS_AstDefImplicitDType; ASTGEN_MEMBERS_AstDefImplicitDType;
int uniqueNum() const { return m_uniqueNum; } int uniqueNum() const { return m_uniqueNum; }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
const AstDefImplicitDType* const sp = VN_DBG_AS(samep, DefImplicitDType); const AstDefImplicitDType* const sp = VN_DBG_AS(samep, DefImplicitDType);
return uniqueNum() == sp->uniqueNum(); return uniqueNum() == sp->uniqueNum();
} }
bool similarDType(const AstNodeDType* samep) const override { bool similarDType(const AstNodeDType* samep) const override {
return type() == samep->type() && same(samep); return type() == samep->type() && sameNode(samep);
} }
AstNodeDType* getChildDTypep() const override { return childDTypep(); } AstNodeDType* getChildDTypep() const override { return childDTypep(); }
AstNodeDType* subDTypep() const override VL_MT_STABLE { AstNodeDType* subDTypep() const override VL_MT_STABLE {
@ -724,7 +724,7 @@ public:
BROKEN_RTN(!((m_refDTypep && !childDTypep()) || (!m_refDTypep && childDTypep()))); BROKEN_RTN(!((m_refDTypep && !childDTypep()) || (!m_refDTypep && childDTypep())));
return nullptr; return nullptr;
} }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
const AstDynArrayDType* const asamep = VN_DBG_AS(samep, DynArrayDType); const AstDynArrayDType* const asamep = VN_DBG_AS(samep, DynArrayDType);
if (!asamep->subDTypep()) return false; if (!asamep->subDTypep()) return false;
return subDTypep() == asamep->subDTypep(); return subDTypep() == asamep->subDTypep();
@ -812,7 +812,7 @@ public:
const char* broken() const override; const char* broken() const override;
int uniqueNum() const { return m_uniqueNum; } int uniqueNum() const { return m_uniqueNum; }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
const AstEnumDType* const sp = VN_DBG_AS(samep, EnumDType); const AstEnumDType* const sp = VN_DBG_AS(samep, EnumDType);
return uniqueNum() == sp->uniqueNum(); return uniqueNum() == sp->uniqueNum();
} }
@ -1106,7 +1106,7 @@ public:
BROKEN_RTN(!((m_refDTypep && !childDTypep()) || (!m_refDTypep && childDTypep()))); BROKEN_RTN(!((m_refDTypep && !childDTypep()) || (!m_refDTypep && childDTypep())));
return nullptr; return nullptr;
} }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
const AstQueueDType* const asamep = VN_DBG_AS(samep, QueueDType); const AstQueueDType* const asamep = VN_DBG_AS(samep, QueueDType);
if (!asamep->subDTypep()) return false; if (!asamep->subDTypep()) return false;
return (subDTypep() == asamep->subDTypep()); return (subDTypep() == asamep->subDTypep());
@ -1169,7 +1169,7 @@ public:
} }
ASTGEN_MEMBERS_AstRefDType; ASTGEN_MEMBERS_AstRefDType;
// METHODS // METHODS
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
const AstRefDType* const asamep = VN_DBG_AS(samep, RefDType); const AstRefDType* const asamep = VN_DBG_AS(samep, RefDType);
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_classOrPackagep == asamep->m_classOrPackagep); && m_name == asamep->m_name && m_classOrPackagep == asamep->m_classOrPackagep);
@ -1245,7 +1245,7 @@ public:
BROKEN_RTN(!((m_refDTypep && !childDTypep()) || (!m_refDTypep && childDTypep()))); BROKEN_RTN(!((m_refDTypep && !childDTypep()) || (!m_refDTypep && childDTypep())));
return nullptr; return nullptr;
} }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
const AstSampleQueueDType* const asamep = VN_DBG_AS(samep, SampleQueueDType); const AstSampleQueueDType* const asamep = VN_DBG_AS(samep, SampleQueueDType);
if (!asamep->subDTypep()) return false; if (!asamep->subDTypep()) return false;
return (subDTypep() == asamep->subDTypep()); return (subDTypep() == asamep->subDTypep());
@ -1324,7 +1324,7 @@ public:
BROKEN_RTN(!((m_refDTypep && !childDTypep()) || (!m_refDTypep && childDTypep()))); BROKEN_RTN(!((m_refDTypep && !childDTypep()) || (!m_refDTypep && childDTypep())));
return nullptr; return nullptr;
} }
bool same(const AstNode* samep) const override; bool sameNode(const AstNode* samep) const override;
bool similarDType(const AstNodeDType* samep) const override; bool similarDType(const AstNodeDType* samep) const override;
void dumpSmall(std::ostream& str) const override; void dumpSmall(std::ostream& str) const override;
AstNodeDType* getChildDTypep() const override { return childDTypep(); } AstNodeDType* getChildDTypep() const override { return childDTypep(); }
@ -1387,7 +1387,7 @@ public:
BROKEN_RTN(!((m_refDTypep && !childDTypep()) || (!m_refDTypep && childDTypep()))); BROKEN_RTN(!((m_refDTypep && !childDTypep()) || (!m_refDTypep && childDTypep())));
return nullptr; return nullptr;
} }
bool same(const AstNode* samep) const override; bool sameNode(const AstNode* samep) const override;
bool similarDType(const AstNodeDType* samep) const override; bool similarDType(const AstNodeDType* samep) const override;
void dumpSmall(std::ostream& str) const override; void dumpSmall(std::ostream& str) const override;
AstNodeDType* getChildDTypep() const override { return childDTypep(); } AstNodeDType* getChildDTypep() const override { return childDTypep(); }
@ -1442,7 +1442,7 @@ public:
} }
ASTGEN_MEMBERS_AstUnpackArrayDType; ASTGEN_MEMBERS_AstUnpackArrayDType;
string prettyDTypeName(bool full) const override; string prettyDTypeName(bool full) const override;
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
const AstUnpackArrayDType* const sp = VN_DBG_AS(samep, UnpackArrayDType); const AstUnpackArrayDType* const sp = VN_DBG_AS(samep, UnpackArrayDType);
return m_isCompound == sp->m_isCompound; return m_isCompound == sp->m_isCompound;
} }

View File

@ -99,7 +99,7 @@ public:
virtual bool signedFlavor() const { return false; } virtual bool signedFlavor() const { return false; }
virtual bool stringFlavor() const { return false; } // N flavor of nodes with both flavors? virtual bool stringFlavor() const { return false; } // N flavor of nodes with both flavors?
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
bool same(const AstNode*) const override { return true; } bool sameNode(const AstNode*) const override { return true; }
bool isPure() override; bool isPure() override;
const char* broken() const override; const char* broken() const override;
@ -203,7 +203,7 @@ public:
void dump(std::ostream& str = std::cout) const override; void dump(std::ostream& str = std::cout) const override;
void dumpJson(std::ostream& str = std::cout) const override; void dumpJson(std::ostream& str = std::cout) const override;
int instrCount() const override { return INSTR_COUNT_CALL; } int instrCount() const override { return INSTR_COUNT_CALL; }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
const AstNodeCCall* const asamep = VN_DBG_AS(samep, NodeCCall); const AstNodeCCall* const asamep = VN_DBG_AS(samep, NodeCCall);
return (funcp() == asamep->funcp() && argTypes() == asamep->argTypes()); return (funcp() == asamep->funcp() && argTypes() == asamep->argTypes());
} }
@ -296,7 +296,7 @@ protected:
public: public:
ASTGEN_MEMBERS_AstNodePreSel; ASTGEN_MEMBERS_AstNodePreSel;
// METHODS // METHODS
bool same(const AstNode*) const override { return true; } bool sameNode(const AstNode*) const override { return true; }
string emitVerilog() final override { V3ERROR_NA_RETURN(""); } string emitVerilog() final override { V3ERROR_NA_RETURN(""); }
string emitC() final override { V3ERROR_NA_RETURN(""); } string emitC() final override { V3ERROR_NA_RETURN(""); }
@ -343,7 +343,7 @@ public:
virtual bool sizeMattersThs() const = 0; // True if output result depends on ths size virtual bool sizeMattersThs() const = 0; // True if output result depends on ths size
virtual bool sizeMattersFhs() const = 0; // True if output result depends on ths size virtual bool sizeMattersFhs() const = 0; // True if output result depends on ths size
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
bool same(const AstNode*) const override { return true; } bool sameNode(const AstNode*) const override { return true; }
bool isPure() override; bool isPure() override;
const char* broken() const override; const char* broken() const override;
@ -397,7 +397,7 @@ public:
virtual bool sizeMattersRhs() const = 0; // True if output result depends on rhs size virtual bool sizeMattersRhs() const = 0; // True if output result depends on rhs size
virtual bool sizeMattersThs() const = 0; // True if output result depends on ths size virtual bool sizeMattersThs() const = 0; // True if output result depends on ths size
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
bool same(const AstNode*) const override { return true; } bool sameNode(const AstNode*) const override { return true; }
bool isPure() override; bool isPure() override;
const char* broken() const override; const char* broken() const override;
@ -478,7 +478,7 @@ public:
virtual bool signedFlavor() const { return false; } virtual bool signedFlavor() const { return false; }
virtual bool stringFlavor() const { return false; } // N flavor of nodes with both flavors? virtual bool stringFlavor() const { return false; } // N flavor of nodes with both flavors?
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
bool same(const AstNode*) const override { return true; } bool sameNode(const AstNode*) const override { return true; }
bool isPure() override; bool isPure() override;
const char* broken() const override; const char* broken() const override;
}; };
@ -629,7 +629,7 @@ public:
bool cleanOut() const override { return m_cleanOut; } bool cleanOut() const override { return m_cleanOut; }
string emitVerilog() override { V3ERROR_NA_RETURN(""); } string emitVerilog() override { V3ERROR_NA_RETURN(""); }
string emitC() override { V3ERROR_NA_RETURN(""); } string emitC() override { V3ERROR_NA_RETURN(""); }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
bool isPure() override { return pure(); } bool isPure() override { return pure(); }
bool pure() const { return m_pure; } bool pure() const { return m_pure; }
void pure(bool flag) { m_pure = flag; } void pure(bool flag) { m_pure = flag; }
@ -653,7 +653,7 @@ public:
ASTGEN_MEMBERS_AstCMethodHard; ASTGEN_MEMBERS_AstCMethodHard;
string name() const override VL_MT_STABLE { return m_name; } // * = Var name string name() const override VL_MT_STABLE { return m_name; } // * = Var name
void name(const string& name) override { m_name = name; } void name(const string& name) override { m_name = name; }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
const AstCMethodHard* const asamep = VN_DBG_AS(samep, CMethodHard); const AstCMethodHard* const asamep = VN_DBG_AS(samep, CMethodHard);
return (m_name == asamep->m_name); return (m_name == asamep->m_name);
} }
@ -773,7 +773,7 @@ public:
} }
ASTGEN_MEMBERS_AstClassOrPackageRef; ASTGEN_MEMBERS_AstClassOrPackageRef;
// METHODS // METHODS
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
return (m_classOrPackageNodep return (m_classOrPackageNodep
== VN_DBG_AS(samep, ClassOrPackageRef)->m_classOrPackageNodep); == VN_DBG_AS(samep, ClassOrPackageRef)->m_classOrPackageNodep);
} }
@ -804,7 +804,7 @@ public:
string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); } string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); }
bool cleanOut() const override { return true; } bool cleanOut() const override { return true; }
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstConsDynArray final : public AstNodeExpr { class AstConsDynArray final : public AstNodeExpr {
// Construct a queue and return object, '{}. '{lhs}, '{lhs. rhs} // Construct a queue and return object, '{}. '{lhs}, '{lhs. rhs}
@ -836,7 +836,7 @@ public:
string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); } string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); }
bool cleanOut() const override { return true; } bool cleanOut() const override { return true; }
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
const AstConsDynArray* const sp = VN_DBG_AS(samep, ConsDynArray); const AstConsDynArray* const sp = VN_DBG_AS(samep, ConsDynArray);
return m_lhsIsValue == sp->m_lhsIsValue && m_rhsIsValue == sp->m_rhsIsValue; return m_lhsIsValue == sp->m_lhsIsValue && m_rhsIsValue == sp->m_rhsIsValue;
} }
@ -863,7 +863,7 @@ public:
string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); } string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); }
bool cleanOut() const override { return true; } bool cleanOut() const override { return true; }
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstConsPackUOrStruct final : public AstNodeExpr { class AstConsPackUOrStruct final : public AstNodeExpr {
// Construct a packed struct and return object, '{member1: value1, member2: value2} // Construct a packed struct and return object, '{member1: value1, member2: value2}
@ -886,7 +886,7 @@ public:
string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); } string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); }
bool cleanOut() const override { return true; } bool cleanOut() const override { return true; }
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstConsQueue final : public AstNodeExpr { class AstConsQueue final : public AstNodeExpr {
// Construct a queue and return object, '{}. '{lhs}, '{lhs. rhs} // Construct a queue and return object, '{}. '{lhs}, '{lhs. rhs}
@ -918,7 +918,7 @@ public:
string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); } string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); }
bool cleanOut() const override { return true; } bool cleanOut() const override { return true; }
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
const AstConsQueue* const sp = VN_DBG_AS(samep, ConsQueue); const AstConsQueue* const sp = VN_DBG_AS(samep, ConsQueue);
return m_lhsIsValue == sp->m_lhsIsValue && m_rhsIsValue == sp->m_rhsIsValue; return m_lhsIsValue == sp->m_lhsIsValue && m_rhsIsValue == sp->m_rhsIsValue;
} }
@ -939,7 +939,7 @@ public:
string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); } string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); }
bool cleanOut() const override { return true; } bool cleanOut() const override { return true; }
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstConst final : public AstNodeExpr { class AstConst final : public AstNodeExpr {
// A constant // A constant
@ -1084,7 +1084,7 @@ public:
string emitVerilog() override { V3ERROR_NA_RETURN(""); } string emitVerilog() override { V3ERROR_NA_RETURN(""); }
string emitC() override { V3ERROR_NA_RETURN(""); } string emitC() override { V3ERROR_NA_RETURN(""); }
bool cleanOut() const override { return true; } bool cleanOut() const override { return true; }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
const AstConst* const sp = VN_DBG_AS(samep, Const); const AstConst* const sp = VN_DBG_AS(samep, Const);
return num().isCaseEq(sp->num()); return num().isCaseEq(sp->num());
} }
@ -1222,7 +1222,7 @@ public:
ASTGEN_MEMBERS_AstEmptyQueue; ASTGEN_MEMBERS_AstEmptyQueue;
string emitC() override { V3ERROR_NA_RETURN(""); } string emitC() override { V3ERROR_NA_RETURN(""); }
string emitVerilog() override { return "{}"; } string emitVerilog() override { return "{}"; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
bool cleanOut() const override { return true; } bool cleanOut() const override { return true; }
}; };
class AstEnumItemRef final : public AstNodeExpr { class AstEnumItemRef final : public AstNodeExpr {
@ -1240,7 +1240,7 @@ public:
void dumpJson(std::ostream& str) const override; void dumpJson(std::ostream& str) const override;
string name() const override VL_MT_STABLE { return itemp()->name(); } string name() const override VL_MT_STABLE { return itemp()->name(); }
int instrCount() const override { return 0; } int instrCount() const override { return 0; }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
const AstEnumItemRef* const sp = VN_DBG_AS(samep, EnumItemRef); const AstEnumItemRef* const sp = VN_DBG_AS(samep, EnumItemRef);
return itemp() == sp->itemp(); return itemp() == sp->itemp();
} }
@ -1273,7 +1273,7 @@ public:
if (AstNode::afterCommentp(stmtsp())) return false; if (AstNode::afterCommentp(stmtsp())) return false;
return resultp()->isPure(); return resultp()->isPure();
} }
bool same(const AstNode*) const override { return true; } bool sameNode(const AstNode*) const override { return true; }
}; };
class AstFError final : public AstNodeExpr { class AstFError final : public AstNodeExpr {
// @astgen op1 := filep : AstNode // @astgen op1 := filep : AstNode
@ -1291,7 +1291,7 @@ public:
int instrCount() const override { return widthInstrs() * 64; } int instrCount() const override { return widthInstrs() * 64; }
bool isPredictOptimizable() const override { return false; } bool isPredictOptimizable() const override { return false; }
bool isPure() override { return false; } // SPECIAL: $display has 'visual' ordering bool isPure() override { return false; } // SPECIAL: $display has 'visual' ordering
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstFOpen final : public AstNodeExpr { class AstFOpen final : public AstNodeExpr {
// @astgen op2 := filenamep : AstNodeExpr // @astgen op2 := filenamep : AstNodeExpr
@ -1312,7 +1312,7 @@ public:
bool isPure() override { return false; } bool isPure() override { return false; }
bool isOutputter() override { return true; } bool isOutputter() override { return true; }
bool isUnlikely() const override { return true; } bool isUnlikely() const override { return true; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstFOpenMcd final : public AstNodeExpr { class AstFOpenMcd final : public AstNodeExpr {
// @astgen op2 := filenamep : AstNodeExpr // @astgen op2 := filenamep : AstNodeExpr
@ -1331,7 +1331,7 @@ public:
bool isPure() override { return false; } bool isPure() override { return false; }
bool isOutputter() override { return true; } bool isOutputter() override { return true; }
bool isUnlikely() const override { return true; } bool isUnlikely() const override { return true; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstFRead final : public AstNodeExpr { class AstFRead final : public AstNodeExpr {
// @astgen op1 := memp : AstNode // VarRef for result // @astgen op1 := memp : AstNode // VarRef for result
@ -1355,7 +1355,7 @@ public:
bool isPure() override { return false; } // SPECIAL: has 'visual' ordering bool isPure() override { return false; } // SPECIAL: has 'visual' ordering
bool isOutputter() override { return true; } // SPECIAL: makes output bool isOutputter() override { return true; } // SPECIAL: makes output
bool cleanOut() const override { return false; } bool cleanOut() const override { return false; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstFRewind final : public AstNodeExpr { class AstFRewind final : public AstNodeExpr {
// @astgen op1 := filep : Optional[AstNode] // @astgen op1 := filep : Optional[AstNode]
@ -1374,7 +1374,7 @@ public:
bool isOutputter() override { return true; } bool isOutputter() override { return true; }
bool isUnlikely() const override { return true; } bool isUnlikely() const override { return true; }
bool cleanOut() const override { return false; } bool cleanOut() const override { return false; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstFScanF final : public AstNodeExpr { class AstFScanF final : public AstNodeExpr {
// @astgen op1 := exprsp : List[AstNode] // VarRefs for results // @astgen op1 := exprsp : List[AstNode] // VarRefs for results
@ -1398,7 +1398,7 @@ public:
bool isPure() override { return false; } // SPECIAL: has 'visual' ordering bool isPure() override { return false; } // SPECIAL: has 'visual' ordering
bool isOutputter() override { return true; } // SPECIAL: makes output bool isOutputter() override { return true; } // SPECIAL: makes output
bool cleanOut() const override { return false; } bool cleanOut() const override { return false; }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
return text() == VN_DBG_AS(samep, FScanF)->text(); return text() == VN_DBG_AS(samep, FScanF)->text();
} }
string text() const { return m_text; } // * = Text to display string text() const { return m_text; } // * = Text to display
@ -1424,7 +1424,7 @@ public:
bool isPure() override { return false; } // SPECIAL: has 'visual' ordering bool isPure() override { return false; } // SPECIAL: has 'visual' ordering
bool isOutputter() override { return true; } // SPECIAL: makes output bool isOutputter() override { return true; } // SPECIAL: makes output
bool cleanOut() const override { return false; } bool cleanOut() const override { return false; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstFTell final : public AstNodeExpr { class AstFTell final : public AstNodeExpr {
// @astgen op1 := filep : AstNode // file (must be a VarRef) // @astgen op1 := filep : AstNode // file (must be a VarRef)
@ -1443,7 +1443,7 @@ public:
bool isOutputter() override { return true; } bool isOutputter() override { return true; }
bool isUnlikely() const override { return true; } bool isUnlikely() const override { return true; }
bool cleanOut() const override { return false; } bool cleanOut() const override { return false; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstFell final : public AstNodeExpr { class AstFell final : public AstNodeExpr {
// Verilog $fell // Verilog $fell
@ -1461,7 +1461,7 @@ public:
string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); } string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); }
bool cleanOut() const override { V3ERROR_NA_RETURN(""); } bool cleanOut() const override { V3ERROR_NA_RETURN(""); }
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstGatePin final : public AstNodeExpr { class AstGatePin final : public AstNodeExpr {
// Possibly expand a gate primitive input pin value to match the range of the gate primitive // Possibly expand a gate primitive input pin value to match the range of the gate primitive
@ -1497,7 +1497,7 @@ public:
string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); } string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); }
bool cleanOut() const override { V3ERROR_NA_RETURN(""); } bool cleanOut() const override { V3ERROR_NA_RETURN(""); }
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstInitArray final : public AstNodeExpr { class AstInitArray final : public AstNodeExpr {
// This is also used as an array value in V3Simulate/const prop. // This is also used as an array value in V3Simulate/const prop.
@ -1529,7 +1529,7 @@ public:
void dumpJson(std::ostream& str) const override; void dumpJson(std::ostream& str) const override;
const char* broken() const override; const char* broken() const override;
void cloneRelink() override; void cloneRelink() override;
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
// Only works if exact same children, instead should override comparison // Only works if exact same children, instead should override comparison
// of children list, and instead use map-vs-map key/value compare // of children list, and instead use map-vs-map key/value compare
return m_map == VN_DBG_AS(samep, InitArray)->m_map; return m_map == VN_DBG_AS(samep, InitArray)->m_map;
@ -1589,7 +1589,7 @@ public:
: ASTGEN_SUPER_LambdaArgRef(fl) : ASTGEN_SUPER_LambdaArgRef(fl)
, m_name{name} , m_name{name}
, m_index(index) {} , m_index(index) {}
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
string emitVerilog() override { return name(); } string emitVerilog() override { return name(); }
string emitC() override { V3ERROR_NA_RETURN(""); } string emitC() override { V3ERROR_NA_RETURN(""); }
bool cleanOut() const override { return true; } bool cleanOut() const override { return true; }
@ -1623,7 +1623,7 @@ public:
string emitVerilog() override { V3ERROR_NA_RETURN(""); } string emitVerilog() override { V3ERROR_NA_RETURN(""); }
string emitC() override { V3ERROR_NA_RETURN(""); } string emitC() override { V3ERROR_NA_RETURN(""); }
bool cleanOut() const override { return true; } bool cleanOut() const override { return true; }
bool same(const AstNode* samep) const override; bool sameNode(const AstNode* samep) const override;
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
AstVar* varp() const { return m_varp; } AstVar* varp() const { return m_varp; }
void varp(AstVar* nodep) { m_varp = nodep; } void varp(AstVar* nodep) { m_varp = nodep; }
@ -1641,7 +1641,7 @@ public:
string emitVerilog() override { return "new"; } string emitVerilog() override { return "new"; }
string emitC() override { V3ERROR_NA_RETURN(""); } string emitC() override { V3ERROR_NA_RETURN(""); }
bool cleanOut() const override { return true; } bool cleanOut() const override { return true; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
}; };
class AstNewDynamic final : public AstNodeExpr { class AstNewDynamic final : public AstNodeExpr {
@ -1659,7 +1659,7 @@ public:
string emitVerilog() override { return "new"; } string emitVerilog() override { return "new"; }
string emitC() override { V3ERROR_NA_RETURN(""); } string emitC() override { V3ERROR_NA_RETURN(""); }
bool cleanOut() const override { return true; } bool cleanOut() const override { return true; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
}; };
class AstParseHolder final : public AstNodeExpr { class AstParseHolder final : public AstNodeExpr {
@ -1696,7 +1696,7 @@ public:
void dump(std::ostream& str) const override; void dump(std::ostream& str) const override;
void dumpJson(std::ostream& str) const override; void dumpJson(std::ostream& str) const override;
string name() const override VL_MT_STABLE { return m_name; } // * = Var name string name() const override VL_MT_STABLE { return m_name; } // * = Var name
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
const AstParseRef* const asamep = VN_DBG_AS(samep, ParseRef); const AstParseRef* const asamep = VN_DBG_AS(samep, ParseRef);
return (expect() == asamep->expect() && m_name == asamep->m_name); return (expect() == asamep->expect() && m_name == asamep->m_name);
} }
@ -1725,7 +1725,7 @@ public:
string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); } string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); }
bool cleanOut() const override { V3ERROR_NA_RETURN(""); } bool cleanOut() const override { V3ERROR_NA_RETURN(""); }
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstPatMember final : public AstNodeExpr { class AstPatMember final : public AstNodeExpr {
// Verilog '{a} or '{a{b}} // Verilog '{a} or '{a{b}}
@ -1826,7 +1826,7 @@ public:
bool isGateOptimizable() const override { return false; } bool isGateOptimizable() const override { return false; }
bool isPredictOptimizable() const override { return false; } bool isPredictOptimizable() const override { return false; }
int instrCount() const override { return INSTR_COUNT_PLI; } int instrCount() const override { return INSTR_COUNT_PLI; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
bool combinable(const AstRand* samep) const { bool combinable(const AstRand* samep) const {
return !seedp() && !samep->seedp() && reset() == samep->reset() return !seedp() && !samep->seedp() && reset() == samep->reset()
&& urandom() == samep->urandom(); && urandom() == samep->urandom();
@ -1852,7 +1852,7 @@ public:
bool isGateOptimizable() const override { return false; } bool isGateOptimizable() const override { return false; }
bool isPredictOptimizable() const override { return false; } bool isPredictOptimizable() const override { return false; }
int instrCount() const override { return INSTR_COUNT_PLI; } int instrCount() const override { return INSTR_COUNT_PLI; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstRose final : public AstNodeExpr { class AstRose final : public AstNodeExpr {
// Verilog $rose // Verilog $rose
@ -1870,7 +1870,7 @@ public:
string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); } string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); }
bool cleanOut() const override { V3ERROR_NA_RETURN(""); } bool cleanOut() const override { V3ERROR_NA_RETURN(""); }
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstSFormatF final : public AstNodeExpr { class AstSFormatF final : public AstNodeExpr {
// Convert format to string, generally under an AstDisplay or AstSFormat // Convert format to string, generally under an AstDisplay or AstSFormat
@ -1907,7 +1907,7 @@ public:
ASTGEN_MEMBERS_AstSFormatF; ASTGEN_MEMBERS_AstSFormatF;
string name() const override VL_MT_STABLE { return m_text; } string name() const override VL_MT_STABLE { return m_text; }
int instrCount() const override { return INSTR_COUNT_PLI; } int instrCount() const override { return INSTR_COUNT_PLI; }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
return text() == VN_DBG_AS(samep, SFormatF)->text(); return text() == VN_DBG_AS(samep, SFormatF)->text();
} }
string verilogKwd() const override { return "$sformatf"; } string verilogKwd() const override { return "$sformatf"; }
@ -1949,7 +1949,7 @@ public:
bool isPure() override { return false; } // SPECIAL: has 'visual' ordering bool isPure() override { return false; } // SPECIAL: has 'visual' ordering
bool isOutputter() override { return true; } // SPECIAL: makes output bool isOutputter() override { return true; } // SPECIAL: makes output
bool cleanOut() const override { return false; } bool cleanOut() const override { return false; }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
return text() == VN_DBG_AS(samep, SScanF)->text(); return text() == VN_DBG_AS(samep, SScanF)->text();
} }
string text() const { return m_text; } // * = Text to display string text() const { return m_text; } // * = Text to display
@ -1969,7 +1969,7 @@ public:
string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); } string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); }
bool cleanOut() const override { V3ERROR_NA_RETURN(""); } bool cleanOut() const override { V3ERROR_NA_RETURN(""); }
int instrCount() const override { return 0; } int instrCount() const override { return 0; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstScopeName final : public AstNodeExpr { class AstScopeName final : public AstNodeExpr {
// For display %m and DPI context imports // For display %m and DPI context imports
@ -1989,7 +1989,7 @@ public:
dtypeSetUInt64(); dtypeSetUInt64();
} }
ASTGEN_MEMBERS_AstScopeName; ASTGEN_MEMBERS_AstScopeName;
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
const AstScopeName* const sp = VN_DBG_AS(samep, ScopeName); const AstScopeName* const sp = VN_DBG_AS(samep, ScopeName);
return (m_dpiExport == sp->m_dpiExport && m_forFormat == sp->m_forFormat); return (m_dpiExport == sp->m_dpiExport && m_forFormat == sp->m_forFormat);
} }
@ -2027,7 +2027,7 @@ public:
this->addElementsp(elementsp); this->addElementsp(elementsp);
} }
ASTGEN_MEMBERS_AstSelLoopVars; ASTGEN_MEMBERS_AstSelLoopVars;
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
bool maybePointedTo() const override VL_MT_SAFE { return false; } bool maybePointedTo() const override VL_MT_SAFE { return false; }
string emitVerilog() override { V3ERROR_NA_RETURN(""); } string emitVerilog() override { V3ERROR_NA_RETURN(""); }
@ -2053,7 +2053,7 @@ public:
string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); } string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); }
bool cleanOut() const override { return true; } bool cleanOut() const override { return true; }
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstSetWildcard final : public AstNodeExpr { class AstSetWildcard final : public AstNodeExpr {
// Set a wildcard assoc array element and return object, '{} // Set a wildcard assoc array element and return object, '{}
@ -2073,7 +2073,7 @@ public:
string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); } string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); }
bool cleanOut() const override { return true; } bool cleanOut() const override { return true; }
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstStable final : public AstNodeExpr { class AstStable final : public AstNodeExpr {
// Verilog $stable // Verilog $stable
@ -2091,7 +2091,7 @@ public:
string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); } string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); }
bool cleanOut() const override { V3ERROR_NA_RETURN(""); } bool cleanOut() const override { V3ERROR_NA_RETURN(""); }
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstStackTraceF final : public AstNodeExpr { class AstStackTraceF final : public AstNodeExpr {
// $stacktrace used as function // $stacktrace used as function
@ -2110,7 +2110,7 @@ public:
bool isOutputter() override { return true; } bool isOutputter() override { return true; }
bool isUnlikely() const override { return true; } bool isUnlikely() const override { return true; }
bool cleanOut() const override { return true; } bool cleanOut() const override { return true; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstStructSel final : public AstNodeExpr { class AstStructSel final : public AstNodeExpr {
// Unpacked struct/union member access // Unpacked struct/union member access
@ -2134,7 +2134,7 @@ public:
// Not a union // Not a union
return VN_IS(fromp()->dtypep()->skipRefp(), StructDType); return VN_IS(fromp()->dtypep()->skipRefp(), StructDType);
} }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
const AstStructSel* const sp = VN_DBG_AS(samep, StructSel); const AstStructSel* const sp = VN_DBG_AS(samep, StructSel);
return m_name == sp->m_name; return m_name == sp->m_name;
} }
@ -2177,7 +2177,7 @@ public:
bool isOutputter() override { return true; } bool isOutputter() override { return true; }
bool isUnlikely() const override { return true; } bool isUnlikely() const override { return true; }
bool cleanOut() const override { return true; } bool cleanOut() const override { return true; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstTestPlusArgs final : public AstNodeExpr { class AstTestPlusArgs final : public AstNodeExpr {
// Search expression. If nullptr then this is a $test$plusargs instead of $value$plusargs. // Search expression. If nullptr then this is a $test$plusargs instead of $value$plusargs.
@ -2195,7 +2195,7 @@ public:
bool isPredictOptimizable() const override { return false; } bool isPredictOptimizable() const override { return false; }
// but isPure() true // but isPure() true
bool cleanOut() const override { return true; } bool cleanOut() const override { return true; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstThisRef final : public AstNodeExpr { class AstThisRef final : public AstNodeExpr {
// Reference to 'this'. // Reference to 'this'.
@ -2212,7 +2212,7 @@ public:
ASTGEN_MEMBERS_AstThisRef; ASTGEN_MEMBERS_AstThisRef;
string emitC() override { return "this"; } string emitC() override { return "this"; }
string emitVerilog() override { return "this"; } string emitVerilog() override { return "this"; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
bool cleanOut() const override { return true; } bool cleanOut() const override { return true; }
AstNodeDType* getChildDTypep() const override { return childDTypep(); } AstNodeDType* getChildDTypep() const override { return childDTypep(); }
AstNodeDType* subDTypep() const VL_MT_STABLE { return dtypep() ? dtypep() : childDTypep(); } AstNodeDType* subDTypep() const VL_MT_STABLE { return dtypep() ? dtypep() : childDTypep(); }
@ -2230,7 +2230,7 @@ public:
string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); } string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); }
bool cleanOut() const override { return true; } bool cleanOut() const override { return true; }
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstTimeUnit final : public AstNodeExpr { class AstTimeUnit final : public AstNodeExpr {
VTimescale m_timeunit; // Parent module time unit VTimescale m_timeunit; // Parent module time unit
@ -2246,7 +2246,7 @@ public:
string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); } string emitSimpleOperator() override { V3ERROR_NA_RETURN(""); }
bool cleanOut() const override { return true; } bool cleanOut() const override { return true; }
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
VTimescale timeunit() const { return m_timeunit; } VTimescale timeunit() const { return m_timeunit; }
void timeunit(const VTimescale& flag) { m_timeunit = flag; } void timeunit(const VTimescale& flag) { m_timeunit = flag; }
}; };
@ -2268,7 +2268,7 @@ public:
bool isSubstOptimizable() const override { return false; } bool isSubstOptimizable() const override { return false; }
bool isPredictOptimizable() const override { return false; } bool isPredictOptimizable() const override { return false; }
int instrCount() const override { return INSTR_COUNT_PLI; } int instrCount() const override { return INSTR_COUNT_PLI; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstUnbounded final : public AstNodeExpr { class AstUnbounded final : public AstNodeExpr {
// A $ in the parser, used for unbounded and queues // A $ in the parser, used for unbounded and queues
@ -2320,7 +2320,7 @@ public:
bool isPredictOptimizable() const override { return false; } bool isPredictOptimizable() const override { return false; }
bool isPure() override { return !outp(); } bool isPure() override { return !outp(); }
bool cleanOut() const override { return true; } bool cleanOut() const override { return true; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstWith final : public AstNodeExpr { class AstWith final : public AstNodeExpr {
// Used as argument to method, then to AstCMethodHard // Used as argument to method, then to AstCMethodHard
@ -2341,7 +2341,7 @@ public:
this->addExprp(exprp); this->addExprp(exprp);
} }
ASTGEN_MEMBERS_AstWith; ASTGEN_MEMBERS_AstWith;
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
const char* broken() const override { const char* broken() const override {
BROKEN_RTN(!indexArgRefp()); // varp needed to know lambda's arg dtype BROKEN_RTN(!indexArgRefp()); // varp needed to know lambda's arg dtype
BROKEN_RTN(!valueArgRefp()); // varp needed to know lambda's arg dtype BROKEN_RTN(!valueArgRefp()); // varp needed to know lambda's arg dtype
@ -2366,7 +2366,7 @@ public:
this->addExprsp(exprsp); this->addExprsp(exprsp);
} }
ASTGEN_MEMBERS_AstWithParse; ASTGEN_MEMBERS_AstWithParse;
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
string emitVerilog() override { V3ERROR_NA_RETURN(""); } string emitVerilog() override { V3ERROR_NA_RETURN(""); }
string emitC() override { V3ERROR_NA_RETURN(""); } string emitC() override { V3ERROR_NA_RETURN(""); }
@ -4158,7 +4158,7 @@ public:
bool sizeMattersRhs() const override { return false; } bool sizeMattersRhs() const override { return false; }
bool isGateOptimizable() const override { return true; } // esp for V3Const::ifSameAssign bool isGateOptimizable() const override { return true; } // esp for V3Const::ifSameAssign
bool isPredictOptimizable() const override { return true; } bool isPredictOptimizable() const override { return true; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
// Special operators // Special operators
// Return base var (or const) nodep dereferences // Return base var (or const) nodep dereferences
@ -4194,7 +4194,7 @@ public:
bool isGateOptimizable() const override { return false; } // AssocSel creates on miss bool isGateOptimizable() const override { return false; } // AssocSel creates on miss
bool isPredictOptimizable() const override { return false; } bool isPredictOptimizable() const override { return false; }
bool isPure() override { return false; } // AssocSel creates on miss bool isPure() override { return false; } // AssocSel creates on miss
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
}; };
class AstWildcardSel final : public AstNodeSel { class AstWildcardSel final : public AstNodeSel {
@ -4226,7 +4226,7 @@ public:
bool sizeMattersRhs() const override { return false; } bool sizeMattersRhs() const override { return false; }
bool isGateOptimizable() const override { return true; } // esp for V3Const::ifSameAssign bool isGateOptimizable() const override { return true; } // esp for V3Const::ifSameAssign
bool isPredictOptimizable() const override { return false; } bool isPredictOptimizable() const override { return false; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
}; };
class AstWordSel final : public AstNodeSel { class AstWordSel final : public AstNodeSel {
@ -4252,7 +4252,7 @@ public:
bool cleanRhs() const override { return true; } bool cleanRhs() const override { return true; }
bool sizeMattersLhs() const override { return false; } bool sizeMattersLhs() const override { return false; }
bool sizeMattersRhs() const override { return false; } bool sizeMattersRhs() const override { return false; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
// === AstNodeStream === // === AstNodeStream ===
@ -4402,7 +4402,7 @@ public:
AstNew(FileLine* fl, AstNodeExpr* pinsp) AstNew(FileLine* fl, AstNodeExpr* pinsp)
: ASTGEN_SUPER_New(fl, "new", pinsp) {} : ASTGEN_SUPER_New(fl, "new", pinsp) {}
ASTGEN_MEMBERS_AstNew; ASTGEN_MEMBERS_AstNew;
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
}; };
class AstTaskRef final : public AstNodeFTaskRef { class AstTaskRef final : public AstNodeFTaskRef {
@ -4511,7 +4511,7 @@ public:
string emitVerilog() override { return "%f$inferred_disable"; } string emitVerilog() override { return "%f$inferred_disable"; }
string emitC() override { V3ERROR_NA_RETURN(""); } string emitC() override { V3ERROR_NA_RETURN(""); }
bool cleanOut() const override { return true; } bool cleanOut() const override { return true; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstTime final : public AstNodeTermop { class AstTime final : public AstNodeTermop {
VTimescale m_timeunit; // Parent module time unit VTimescale m_timeunit; // Parent module time unit
@ -4528,7 +4528,7 @@ public:
bool isGateOptimizable() const override { return false; } bool isGateOptimizable() const override { return false; }
bool isPredictOptimizable() const override { return false; } bool isPredictOptimizable() const override { return false; }
int instrCount() const override { return INSTR_COUNT_TIME; } int instrCount() const override { return INSTR_COUNT_TIME; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
void dump(std::ostream& str = std::cout) const override; void dump(std::ostream& str = std::cout) const override;
void dumpJson(std::ostream& str = std::cout) const override; void dumpJson(std::ostream& str = std::cout) const override;
VTimescale timeunit() const { return m_timeunit; } VTimescale timeunit() const { return m_timeunit; }
@ -4549,7 +4549,7 @@ public:
bool isGateOptimizable() const override { return false; } bool isGateOptimizable() const override { return false; }
bool isPredictOptimizable() const override { return false; } bool isPredictOptimizable() const override { return false; }
int instrCount() const override { return INSTR_COUNT_TIME; } int instrCount() const override { return INSTR_COUNT_TIME; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
void dump(std::ostream& str = std::cout) const override; void dump(std::ostream& str = std::cout) const override;
void dumpJson(std::ostream& str = std::cout) const override; void dumpJson(std::ostream& str = std::cout) const override;
VTimescale timeunit() const { return m_timeunit; } VTimescale timeunit() const { return m_timeunit; }
@ -4719,7 +4719,7 @@ public:
bool sizeMattersLhs() const override { return false; } bool sizeMattersLhs() const override { return false; }
bool sizeMattersRhs() const override { return false; } bool sizeMattersRhs() const override { return false; }
bool sizeMattersThs() const override { return false; } bool sizeMattersThs() const override { return false; }
bool same(const AstNode*) const override { return true; } bool sameNode(const AstNode*) const override { return true; }
int instrCount() const override { return widthInstrs() * (VN_CAST(lsbp(), Const) ? 3 : 10); } int instrCount() const override { return widthInstrs() * (VN_CAST(lsbp(), Const) ? 3 : 10); }
int widthConst() const { return VN_AS(widthp(), Const)->toSInt(); } int widthConst() const { return VN_AS(widthp(), Const)->toSInt(); }
int lsbConst() const { return VN_AS(lsbp(), Const)->toSInt(); } int lsbConst() const { return VN_AS(lsbp(), Const)->toSInt(); }
@ -4756,7 +4756,7 @@ public:
bool sizeMattersLhs() const override { return false; } bool sizeMattersLhs() const override { return false; }
bool sizeMattersRhs() const override { return false; } bool sizeMattersRhs() const override { return false; }
bool sizeMattersThs() const override { return false; } bool sizeMattersThs() const override { return false; }
bool same(const AstNode*) const override { return true; } bool sameNode(const AstNode*) const override { return true; }
int instrCount() const override { return 10; } // Removed before matters int instrCount() const override { return 10; } // Removed before matters
// For widthConst()/loConst etc, see declRange().elements() and other VNumRange methods // For widthConst()/loConst etc, see declRange().elements() and other VNumRange methods
VNumRange& declRange() VL_MT_STABLE { return m_declRange; } VNumRange& declRange() VL_MT_STABLE { return m_declRange; }
@ -4940,7 +4940,7 @@ public:
bool cleanOut() const override { return true; } bool cleanOut() const override { return true; }
bool cleanLhs() const override { return true; } bool cleanLhs() const override { return true; }
bool sizeMattersLhs() const override { return false; } // Special cased in V3Cast bool sizeMattersLhs() const override { return false; } // Special cased in V3Cast
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
return size() == VN_DBG_AS(samep, CCast)->size(); return size() == VN_DBG_AS(samep, CCast)->size();
} }
void dump(std::ostream& str = std::cout) const override; void dump(std::ostream& str = std::cout) const override;
@ -5006,7 +5006,7 @@ public:
bool cleanOut() const override { return true; } bool cleanOut() const override { return true; }
bool cleanLhs() const override { return true; } bool cleanLhs() const override { return true; }
bool sizeMattersLhs() const override { return false; } bool sizeMattersLhs() const override { return false; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstExtend final : public AstNodeUniop { class AstExtend final : public AstNodeUniop {
// Expand a value into a wider entity by 0 extension. Width is implied from nodep->width() // Expand a value into a wider entity by 0 extension. Width is implied from nodep->width()
@ -5269,7 +5269,7 @@ public:
bool cleanOut() const override { return true; } bool cleanOut() const override { return true; }
bool cleanLhs() const override { return true; } bool cleanLhs() const override { return true; }
bool sizeMattersLhs() const override { return false; } bool sizeMattersLhs() const override { return false; }
bool same(const AstNode* samep) const override { return fileline() == samep->fileline(); } bool sameNode(const AstNode* samep) const override { return fileline() == samep->fileline(); }
}; };
class AstOneHot final : public AstNodeUniop { class AstOneHot final : public AstNodeUniop {
// True if only single bit set in vector // True if only single bit set in vector
@ -5718,8 +5718,8 @@ public:
void dump(std::ostream& str) const override; void dump(std::ostream& str) const override;
void dumpJson(std::ostream& str) const override; void dumpJson(std::ostream& str) const override;
const char* broken() const override; const char* broken() const override;
bool same(const AstNode* samep) const override; bool sameNode(const AstNode* samep) const override;
inline bool same(const AstVarRef* samep) const; inline bool sameNode(const AstVarRef* samep) const;
inline bool sameNoLvalue(AstVarRef* samep) const; inline bool sameNoLvalue(AstVarRef* samep) const;
int instrCount() const override; int instrCount() const override;
string emitVerilog() override { V3ERROR_NA_RETURN(""); } string emitVerilog() override { V3ERROR_NA_RETURN(""); }
@ -5751,7 +5751,7 @@ public:
string emitC() override { V3ERROR_NA_RETURN(""); } string emitC() override { V3ERROR_NA_RETURN(""); }
bool cleanOut() const override { return true; } bool cleanOut() const override { return true; }
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
const AstVarXRef* asamep = VN_DBG_AS(samep, VarXRef); const AstVarXRef* asamep = VN_DBG_AS(samep, VarXRef);
return (selfPointer() == asamep->selfPointer() && varp() == asamep->varp() return (selfPointer() == asamep->selfPointer() && varp() == asamep->varp()
&& name() == asamep->name() && dotted() == asamep->dotted()); && name() == asamep->name() && dotted() == asamep->dotted());

View File

@ -214,7 +214,7 @@ public:
void dump(std::ostream& str) const override; void dump(std::ostream& str) const override;
void dumpJson(std::ostream& str) const override; void dumpJson(std::ostream& str) const override;
string name() const override VL_MT_STABLE { return m_name; } string name() const override VL_MT_STABLE { return m_name; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstNodeModule VL_NOT_FINAL : public AstNode { class AstNodeModule VL_NOT_FINAL : public AstNode {
// A module, package, program or interface declaration; // A module, package, program or interface declaration;
@ -375,7 +375,7 @@ public:
bool hasDType() const override VL_MT_SAFE { return true; } bool hasDType() const override VL_MT_SAFE { return true; }
virtual bool cleanRhs() const { return true; } virtual bool cleanRhs() const { return true; }
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
bool same(const AstNode*) const override { return true; } bool sameNode(const AstNode*) const override { return true; }
string verilogKwd() const override { return "="; } string verilogKwd() const override { return "="; }
bool isTimingControl() const override { return timingControlp(); } bool isTimingControl() const override { return timingControlp(); }
virtual bool brokeLhsMustBeLvalue() const = 0; virtual bool brokeLhsMustBeLvalue() const = 0;
@ -418,7 +418,7 @@ public:
} }
ASTGEN_MEMBERS_AstNodeCoverOrAssert; ASTGEN_MEMBERS_AstNodeCoverOrAssert;
string name() const override VL_MT_STABLE { return m_name; } // * = Var name string name() const override VL_MT_STABLE { return m_name; } // * = Var name
bool same(const AstNode* samep) const override { return samep->name() == name(); } bool sameNode(const AstNode* samep) const override { return samep->name() == name(); }
void name(const string& name) override { m_name = name; } void name(const string& name) override { m_name = name; }
void dump(std::ostream& str = std::cout) const override; void dump(std::ostream& str = std::cout) const override;
void dumpJson(std::ostream& str = std::cout) const override; void dumpJson(std::ostream& str = std::cout) const override;
@ -450,7 +450,7 @@ public:
ASTGEN_MEMBERS_AstNodeFor; ASTGEN_MEMBERS_AstNodeFor;
bool isGateOptimizable() const override { return false; } bool isGateOptimizable() const override { return false; }
int instrCount() const override { return INSTR_COUNT_BRANCH; } int instrCount() const override { return INSTR_COUNT_BRANCH; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstNodeForeach VL_NOT_FINAL : public AstNodeStmt { class AstNodeForeach VL_NOT_FINAL : public AstNodeStmt {
// @astgen op1 := arrayp : AstNode // @astgen op1 := arrayp : AstNode
@ -464,7 +464,7 @@ public:
ASTGEN_MEMBERS_AstNodeForeach; ASTGEN_MEMBERS_AstNodeForeach;
bool isGateOptimizable() const override { return false; } bool isGateOptimizable() const override { return false; }
int instrCount() const override { return INSTR_COUNT_BRANCH; } int instrCount() const override { return INSTR_COUNT_BRANCH; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
bool isFirstInMyListOfStatements(AstNode* n) const override { return n == stmtsp(); } bool isFirstInMyListOfStatements(AstNode* n) const override { return n == stmtsp(); }
}; };
class AstNodeIf VL_NOT_FINAL : public AstNodeStmt { class AstNodeIf VL_NOT_FINAL : public AstNodeStmt {
@ -487,7 +487,7 @@ public:
bool isGateOptimizable() const override { return false; } bool isGateOptimizable() const override { return false; }
bool isGateDedupable() const override { return true; } bool isGateDedupable() const override { return true; }
int instrCount() const override { return INSTR_COUNT_BRANCH; } int instrCount() const override { return INSTR_COUNT_BRANCH; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
void branchPred(VBranchPred flag) { m_branchPred = flag; } void branchPred(VBranchPred flag) { m_branchPred = flag; }
VBranchPred branchPred() const { return m_branchPred; } VBranchPred branchPred() const { return m_branchPred; }
void isBoundsCheck(bool flag) { m_isBoundsCheck = flag; } void isBoundsCheck(bool flag) { m_isBoundsCheck = flag; }
@ -519,7 +519,7 @@ public:
bool isPure() override { return false; } bool isPure() override { return false; }
bool isOutputter() override { return true; } bool isOutputter() override { return true; }
bool isUnlikely() const override { return true; } bool isUnlikely() const override { return true; }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
return isHex() == VN_DBG_AS(samep, NodeReadWriteMem)->isHex(); return isHex() == VN_DBG_AS(samep, NodeReadWriteMem)->isHex();
} }
bool isHex() const { return m_isHex; } bool isHex() const { return m_isHex; }
@ -540,7 +540,7 @@ public:
ASTGEN_MEMBERS_AstNodeText; ASTGEN_MEMBERS_AstNodeText;
void dump(std::ostream& str = std::cout) const override; void dump(std::ostream& str = std::cout) const override;
void dumpJson(std::ostream& str = std::cout) const override; void dumpJson(std::ostream& str = std::cout) const override;
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
const AstNodeText* asamep = VN_DBG_AS(samep, NodeText); const AstNodeText* asamep = VN_DBG_AS(samep, NodeText);
return text() == asamep->text(); return text() == asamep->text();
} }
@ -677,7 +677,7 @@ public:
bool maybePointedTo() const override VL_MT_SAFE { return true; } bool maybePointedTo() const override VL_MT_SAFE { return true; }
void dump(std::ostream& str = std::cout) const override; void dump(std::ostream& str = std::cout) const override;
void dumpJson(std::ostream& str = std::cout) const override; void dumpJson(std::ostream& str = std::cout) const override;
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
const AstCFunc* const asamep = VN_DBG_AS(samep, CFunc); const AstCFunc* const asamep = VN_DBG_AS(samep, CFunc);
return ((isTrace() == asamep->isTrace()) && (rtnTypeVoid() == asamep->rtnTypeVoid()) return ((isTrace() == asamep->isTrace()) && (rtnTypeVoid() == asamep->rtnTypeVoid())
&& (argTypes() == asamep->argTypes()) && isLoose() == asamep->isLoose() && (argTypes() == asamep->argTypes()) && isLoose() == asamep->isLoose()
@ -1037,7 +1037,7 @@ public:
bool isGateOptimizable() const override { return false; } bool isGateOptimizable() const override { return false; }
bool isPredictOptimizable() const override { return false; } bool isPredictOptimizable() const override { return false; }
bool maybePointedTo() const override VL_MT_SAFE { return true; } bool maybePointedTo() const override VL_MT_SAFE { return true; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
void isKwdPure(bool flag) { m_isKwdPure = flag; } void isKwdPure(bool flag) { m_isKwdPure = flag; }
bool isKwdPure() const { return m_isKwdPure; } bool isKwdPure() const { return m_isKwdPure; }
void isStatic(bool flag) { m_isStatic = flag; } void isStatic(bool flag) { m_isStatic = flag; }
@ -1056,7 +1056,7 @@ public:
ASTGEN_MEMBERS_AstConstraintBefore; ASTGEN_MEMBERS_AstConstraintBefore;
bool isGateOptimizable() const override { return false; } bool isGateOptimizable() const override { return false; }
bool isPredictOptimizable() const override { return false; } bool isPredictOptimizable() const override { return false; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstDefParam final : public AstNode { class AstDefParam final : public AstNode {
// A defparam assignment // A defparam assignment
@ -1073,7 +1073,7 @@ public:
} }
string name() const override VL_MT_STABLE { return m_name; } // * = Scope name string name() const override VL_MT_STABLE { return m_name; } // * = Scope name
ASTGEN_MEMBERS_AstDefParam; ASTGEN_MEMBERS_AstDefParam;
bool same(const AstNode*) const override { return true; } bool sameNode(const AstNode*) const override { return true; }
string path() const { return m_path; } string path() const { return m_path; }
}; };
class AstDefaultDisable final : public AstNode { class AstDefaultDisable final : public AstNode {
@ -1121,7 +1121,7 @@ public:
bool isPure() override { return false; } // SPECIAL: $display has 'visual' ordering bool isPure() override { return false; } // SPECIAL: $display has 'visual' ordering
bool isOutputter() override { return true; } // SPECIAL: $display makes output bool isOutputter() override { return true; } // SPECIAL: $display makes output
bool isUnlikely() const override { return true; } bool isUnlikely() const override { return true; }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
return displayType() == VN_DBG_AS(samep, ElabDisplay)->displayType(); return displayType() == VN_DBG_AS(samep, ElabDisplay)->displayType();
} }
int instrCount() const override { return INSTR_COUNT_PLI; } int instrCount() const override { return INSTR_COUNT_PLI; }
@ -1134,7 +1134,7 @@ public:
explicit AstEmpty(FileLine* fl) explicit AstEmpty(FileLine* fl)
: ASTGEN_SUPER_Empty(fl) {} : ASTGEN_SUPER_Empty(fl) {}
ASTGEN_MEMBERS_AstEmpty; ASTGEN_MEMBERS_AstEmpty;
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstExecGraph final : public AstNode { class AstExecGraph final : public AstNode {
// For parallel execution, this node contains a dependency graph. Each // For parallel execution, this node contains a dependency graph. Each
@ -1482,7 +1482,7 @@ public:
ASTGEN_MEMBERS_AstPragma; ASTGEN_MEMBERS_AstPragma;
VPragmaType pragType() const { return m_pragType; } // *=type of the pragma VPragmaType pragType() const { return m_pragType; } // *=type of the pragma
bool isPredictOptimizable() const override { return false; } bool isPredictOptimizable() const override { return false; }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
return pragType() == VN_DBG_AS(samep, Pragma)->pragType(); return pragType() == VN_DBG_AS(samep, Pragma)->pragType();
} }
}; };
@ -1517,7 +1517,7 @@ public:
this->lhsp(lhsp); this->lhsp(lhsp);
} }
ASTGEN_MEMBERS_AstPull; ASTGEN_MEMBERS_AstPull;
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
return direction() == VN_DBG_AS(samep, Pull)->direction(); return direction() == VN_DBG_AS(samep, Pull)->direction();
} }
uint32_t direction() const { return (uint32_t)m_direction; } uint32_t direction() const { return (uint32_t)m_direction; }
@ -1555,7 +1555,7 @@ public:
void name(const string& name) override { m_name = name; } void name(const string& name) override { m_name = name; }
void dump(std::ostream& str) const override; void dump(std::ostream& str) const override;
void dumpJson(std::ostream& str) const override; void dumpJson(std::ostream& str) const override;
bool same(const AstNode* samep) const override; bool sameNode(const AstNode* samep) const override;
string nameDotless() const; string nameDotless() const;
AstNodeModule* modp() const { return m_modp; } AstNodeModule* modp() const { return m_modp; }
// //
@ -1602,7 +1602,7 @@ public:
ASTGEN_MEMBERS_AstSenItem; ASTGEN_MEMBERS_AstSenItem;
void dump(std::ostream& str) const override; void dump(std::ostream& str) const override;
void dumpJson(std::ostream& str) const override; void dumpJson(std::ostream& str) const override;
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
return edgeType() == VN_DBG_AS(samep, SenItem)->edgeType(); return edgeType() == VN_DBG_AS(samep, SenItem)->edgeType();
} }
VEdgeType edgeType() const { return m_edgeType; } VEdgeType edgeType() const { return m_edgeType; }
@ -1955,7 +1955,7 @@ public:
ASTGEN_MEMBERS_AstVar; ASTGEN_MEMBERS_AstVar;
void dump(std::ostream& str) const override; void dump(std::ostream& str) const override;
void dumpJson(std::ostream& str) const override; void dumpJson(std::ostream& str) const override;
bool same(const AstNode* samep) const override; bool sameNode(const AstNode* samep) const override;
string name() const override VL_MT_STABLE { return m_name; } // * = Var name string name() const override VL_MT_STABLE { return m_name; } // * = Var name
bool hasDType() const override VL_MT_SAFE { return true; } bool hasDType() const override VL_MT_SAFE { return true; }
bool maybePointedTo() const override VL_MT_SAFE { return true; } bool maybePointedTo() const override VL_MT_SAFE { return true; }
@ -2211,7 +2211,7 @@ public:
string name() const override VL_MT_STABLE { return scopep()->name() + "->" + varp()->name(); } string name() const override VL_MT_STABLE { return scopep()->name() + "->" + varp()->name(); }
void dump(std::ostream& str) const override; void dump(std::ostream& str) const override;
void dumpJson(std::ostream& str) const override; void dumpJson(std::ostream& str) const override;
bool same(const AstNode* samep) const override; bool sameNode(const AstNode* samep) const override;
bool hasDType() const override VL_MT_SAFE { return true; } bool hasDType() const override VL_MT_SAFE { return true; }
AstVar* varp() const VL_MT_STABLE { return m_varp; } // [After Link] Pointer to variable AstVar* varp() const VL_MT_STABLE { return m_varp; } // [After Link] Pointer to variable
AstScope* scopep() const VL_MT_STABLE { return m_scopep; } // Pointer to scope it's under AstScope* scopep() const VL_MT_STABLE { return m_scopep; } // Pointer to scope it's under
@ -2598,7 +2598,7 @@ public:
ASTGEN_MEMBERS_AstBracketRange; ASTGEN_MEMBERS_AstBracketRange;
virtual string emitC() { V3ERROR_NA_RETURN(""); } virtual string emitC() { V3ERROR_NA_RETURN(""); }
virtual string emitVerilog() { V3ERROR_NA_RETURN(""); } virtual string emitVerilog() { V3ERROR_NA_RETURN(""); }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
// Will be removed in V3Width, which relies on this // Will be removed in V3Width, which relies on this
// being a child not a dtype pointed node // being a child not a dtype pointed node
bool maybePointedTo() const override VL_MT_SAFE { return false; } bool maybePointedTo() const override VL_MT_SAFE { return false; }
@ -2633,7 +2633,7 @@ public:
void dump(std::ostream& str) const override; void dump(std::ostream& str) const override;
void dumpJson(std::ostream& str) const override; void dumpJson(std::ostream& str) const override;
virtual string emitC() { V3ERROR_NA_RETURN(""); } virtual string emitC() { V3ERROR_NA_RETURN(""); }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstUnsizedRange final : public AstNodeRange { class AstUnsizedRange final : public AstNodeRange {
// Unsized range specification, for open arrays // Unsized range specification, for open arrays
@ -2643,7 +2643,7 @@ public:
ASTGEN_MEMBERS_AstUnsizedRange; ASTGEN_MEMBERS_AstUnsizedRange;
virtual string emitC() { V3ERROR_NA_RETURN(""); } virtual string emitC() { V3ERROR_NA_RETURN(""); }
virtual string emitVerilog() { return "[]"; } virtual string emitVerilog() { return "[]"; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstWildcardRange final : public AstNodeRange { class AstWildcardRange final : public AstNodeRange {
// Wildcard range specification, for wildcard index type associative arrays // Wildcard range specification, for wildcard index type associative arrays
@ -2653,7 +2653,7 @@ public:
ASTGEN_MEMBERS_AstWildcardRange; ASTGEN_MEMBERS_AstWildcardRange;
virtual string emitC() { V3ERROR_NA_RETURN(""); } virtual string emitC() { V3ERROR_NA_RETURN(""); }
virtual string emitVerilog() { return "[*]"; } virtual string emitVerilog() { return "[*]"; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
// === AstNodeStmt === // === AstNodeStmt ===
@ -2669,7 +2669,7 @@ public:
addStmtsp(stmtsp); addStmtsp(stmtsp);
} }
ASTGEN_MEMBERS_AstAlwaysPublic; ASTGEN_MEMBERS_AstAlwaysPublic;
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
// Special accessors // Special accessors
bool isJustOneBodyStmt() const { return stmtsp() && !stmtsp()->nextp(); } bool isJustOneBodyStmt() const { return stmtsp() && !stmtsp()->nextp(); }
bool isFirstInMyListOfStatements(AstNode* n) const override { return n == stmtsp(); } bool isFirstInMyListOfStatements(AstNode* n) const override { return n == stmtsp(); }
@ -2726,7 +2726,7 @@ public:
ASTGEN_MEMBERS_AstCReset; ASTGEN_MEMBERS_AstCReset;
bool isGateOptimizable() const override { return false; } bool isGateOptimizable() const override { return false; }
bool isPredictOptimizable() const override { return false; } bool isPredictOptimizable() const override { return false; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstCReturn final : public AstNodeStmt { class AstCReturn final : public AstNodeStmt {
// C++ return from a function // C++ return from a function
@ -2738,7 +2738,7 @@ public:
} }
ASTGEN_MEMBERS_AstCReturn; ASTGEN_MEMBERS_AstCReturn;
int instrCount() const override { return widthInstrs(); } int instrCount() const override { return widthInstrs(); }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstCStmt final : public AstNodeStmt { class AstCStmt final : public AstNodeStmt {
// Emit C statement // Emit C statement
@ -2752,7 +2752,7 @@ public:
ASTGEN_MEMBERS_AstCStmt; ASTGEN_MEMBERS_AstCStmt;
bool isGateOptimizable() const override { return false; } bool isGateOptimizable() const override { return false; }
bool isPredictOptimizable() const override { return false; } bool isPredictOptimizable() const override { return false; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstComment final : public AstNodeStmt { class AstComment final : public AstNodeStmt {
// Some comment to put into the output stream // Some comment to put into the output stream
@ -2765,7 +2765,7 @@ public:
, m_showAt{showAt} {} , m_showAt{showAt} {}
ASTGEN_MEMBERS_AstComment; ASTGEN_MEMBERS_AstComment;
string name() const override VL_MT_STABLE { return m_name; } // * = Text string name() const override VL_MT_STABLE { return m_name; } // * = Text
bool same(const AstNode* samep) const override { return true; } // Ignore name in comments bool sameNode(const AstNode* samep) const override { return true; } // Ignore name in comments
virtual bool showAt() const { return m_showAt; } virtual bool showAt() const { return m_showAt; }
}; };
class AstConstraintExpr final : public AstNodeStmt { class AstConstraintExpr final : public AstNodeStmt {
@ -2783,7 +2783,7 @@ public:
void dumpJson(std::ostream& str) const override; void dumpJson(std::ostream& str) const override;
bool isGateOptimizable() const override { return false; } bool isGateOptimizable() const override { return false; }
bool isPredictOptimizable() const override { return false; } bool isPredictOptimizable() const override { return false; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
bool isDisableSoft() const { return m_isDisableSoft; } bool isDisableSoft() const { return m_isDisableSoft; }
void isDisableSoft(bool flag) { m_isDisableSoft = flag; } void isDisableSoft(bool flag) { m_isDisableSoft = flag; }
bool isSoft() const { return m_isSoft; } bool isSoft() const { return m_isSoft; }
@ -2800,7 +2800,7 @@ public:
ASTGEN_MEMBERS_AstConstraintUnique; ASTGEN_MEMBERS_AstConstraintUnique;
bool isGateOptimizable() const override { return false; } bool isGateOptimizable() const override { return false; }
bool isPredictOptimizable() const override { return false; } bool isPredictOptimizable() const override { return false; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstContinue final : public AstNodeStmt { class AstContinue final : public AstNodeStmt {
public: public:
@ -2852,7 +2852,7 @@ public:
const string& hier() const { return m_hier; } const string& hier() const { return m_hier; }
void hier(const string& flag) { m_hier = flag; } void hier(const string& flag) { m_hier = flag; }
void comment(const string& flag) { m_text = flag; } void comment(const string& flag) { m_text = flag; }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
const AstCoverDecl* const asamep = VN_DBG_AS(samep, CoverDecl); const AstCoverDecl* const asamep = VN_DBG_AS(samep, CoverDecl);
return (fileline() == asamep->fileline() && linescov() == asamep->linescov() return (fileline() == asamep->fileline() && linescov() == asamep->linescov()
&& hier() == asamep->hier() && comment() == asamep->comment()); && hier() == asamep->hier() && comment() == asamep->comment());
@ -2876,7 +2876,7 @@ public:
void dump(std::ostream& str) const override; void dump(std::ostream& str) const override;
void dumpJson(std::ostream& str) const override; void dumpJson(std::ostream& str) const override;
int instrCount() const override { return 1 + 2 * INSTR_COUNT_LD; } int instrCount() const override { return 1 + 2 * INSTR_COUNT_LD; }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
return declp() == VN_DBG_AS(samep, CoverInc)->declp(); return declp() == VN_DBG_AS(samep, CoverInc)->declp();
} }
bool isGateOptimizable() const override { return false; } bool isGateOptimizable() const override { return false; }
@ -2900,7 +2900,7 @@ public:
} }
ASTGEN_MEMBERS_AstCoverToggle; ASTGEN_MEMBERS_AstCoverToggle;
int instrCount() const override { return 3 + INSTR_COUNT_BRANCH + INSTR_COUNT_LD; } int instrCount() const override { return 3 + INSTR_COUNT_BRANCH + INSTR_COUNT_LD; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
bool isGateOptimizable() const override { return false; } bool isGateOptimizable() const override { return false; }
bool isPredictOptimizable() const override { return true; } bool isPredictOptimizable() const override { return true; }
bool isOutputter() override { bool isOutputter() override {
@ -2925,7 +2925,7 @@ public:
void dump(std::ostream& str) const override; void dump(std::ostream& str) const override;
void dumpJson(std::ostream& str) const override; void dumpJson(std::ostream& str) const override;
bool isTimingControl() const override { return true; } bool isTimingControl() const override { return true; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
void timeunit(const VTimescale& flag) { m_timeunit = flag; } void timeunit(const VTimescale& flag) { m_timeunit = flag; }
VTimescale timeunit() const { return m_timeunit; } VTimescale timeunit() const { return m_timeunit; }
bool isCycleDelay() const { return m_isCycle; } bool isCycleDelay() const { return m_isCycle; }
@ -2987,7 +2987,7 @@ public:
bool isPure() override { return false; } // SPECIAL: $display has 'visual' ordering bool isPure() override { return false; } // SPECIAL: $display has 'visual' ordering
bool isOutputter() override { return true; } // SPECIAL: $display makes output bool isOutputter() override { return true; } // SPECIAL: $display makes output
bool isUnlikely() const override { return true; } bool isUnlikely() const override { return true; }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
return displayType() == VN_DBG_AS(samep, Display)->displayType(); return displayType() == VN_DBG_AS(samep, Display)->displayType();
} }
int instrCount() const override { return INSTR_COUNT_PLI; } int instrCount() const override { return INSTR_COUNT_PLI; }
@ -3008,7 +3008,7 @@ public:
ASTGEN_MEMBERS_AstDoWhile; ASTGEN_MEMBERS_AstDoWhile;
bool isGateOptimizable() const override { return false; } bool isGateOptimizable() const override { return false; }
int instrCount() const override { return INSTR_COUNT_BRANCH; } int instrCount() const override { return INSTR_COUNT_BRANCH; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
// Stop statement searchback here // Stop statement searchback here
bool isFirstInMyListOfStatements(AstNode* n) const override { return n == stmtsp(); } bool isFirstInMyListOfStatements(AstNode* n) const override { return n == stmtsp(); }
}; };
@ -3030,7 +3030,7 @@ public:
bool isPredictOptimizable() const override { return false; } bool isPredictOptimizable() const override { return false; }
bool isPure() override { return false; } bool isPure() override { return false; }
virtual bool cleanOut() const { return true; } virtual bool cleanOut() const { return true; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
VDumpCtlType ctlType() const { return m_ctlType; } VDumpCtlType ctlType() const { return m_ctlType; }
}; };
class AstEventControl final : public AstNodeStmt { class AstEventControl final : public AstNodeStmt {
@ -3063,7 +3063,7 @@ public:
bool isPure() override { return false; } bool isPure() override { return false; }
bool isOutputter() override { return true; } bool isOutputter() override { return true; }
bool isUnlikely() const override { return true; } bool isUnlikely() const override { return true; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstFFlush final : public AstNodeStmt { class AstFFlush final : public AstNodeStmt {
// Parents: stmtlist // Parents: stmtlist
@ -3080,7 +3080,7 @@ public:
bool isPure() override { return false; } bool isPure() override { return false; }
bool isOutputter() override { return true; } bool isOutputter() override { return true; }
bool isUnlikely() const override { return true; } bool isUnlikely() const override { return true; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstFinish final : public AstNodeStmt { class AstFinish final : public AstNodeStmt {
public: public:
@ -3093,7 +3093,7 @@ public:
bool isOutputter() override { return true; } // SPECIAL: $display makes output bool isOutputter() override { return true; } // SPECIAL: $display makes output
bool isUnlikely() const override { return true; } bool isUnlikely() const override { return true; }
int instrCount() const override { return 0; } // Rarely executes int instrCount() const override { return 0; } // Rarely executes
bool same(const AstNode* samep) const override { return fileline() == samep->fileline(); } bool sameNode(const AstNode* samep) const override { return fileline() == samep->fileline(); }
}; };
class AstFireEvent final : public AstNodeStmt { class AstFireEvent final : public AstNodeStmt {
// '-> _' and '->> _' event trigger statements // '-> _' and '->> _' event trigger statements
@ -3128,7 +3128,7 @@ public:
const char* broken() const override; const char* broken() const override;
int instrCount() const override { return 0; } int instrCount() const override { return 0; }
bool maybePointedTo() const override VL_MT_SAFE { return true; } bool maybePointedTo() const override VL_MT_SAFE { return true; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
int labelNum() const { return m_labelNum; } int labelNum() const { return m_labelNum; }
void labelNum(int flag) { m_labelNum = flag; } void labelNum(int flag) { m_labelNum = flag; }
AstJumpLabel* labelp() const { return m_labelp; } AstJumpLabel* labelp() const { return m_labelp; }
@ -3154,7 +3154,7 @@ public:
void dump(std::ostream& str) const override; void dump(std::ostream& str) const override;
void dumpJson(std::ostream& str) const override; void dumpJson(std::ostream& str) const override;
int instrCount() const override { return INSTR_COUNT_BRANCH; } int instrCount() const override { return INSTR_COUNT_BRANCH; }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
return labelp() == VN_DBG_AS(samep, JumpGo)->labelp(); return labelp() == VN_DBG_AS(samep, JumpGo)->labelp();
} }
bool isGateOptimizable() const override { return false; } bool isGateOptimizable() const override { return false; }
@ -3182,7 +3182,7 @@ public:
void dump(std::ostream& str) const override; void dump(std::ostream& str) const override;
void dumpJson(std::ostream& str) const override; void dumpJson(std::ostream& str) const override;
int instrCount() const override { return 0; } int instrCount() const override { return 0; }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
return blockp() == VN_DBG_AS(samep, JumpLabel)->blockp(); return blockp() == VN_DBG_AS(samep, JumpLabel)->blockp();
} }
AstJumpBlock* blockp() const { return m_blockp; } AstJumpBlock* blockp() const { return m_blockp; }
@ -3201,7 +3201,7 @@ public:
bool isPure() override { return false; } // Though deleted before opt bool isPure() override { return false; } // Though deleted before opt
bool isOutputter() override { return true; } // Though deleted before opt bool isOutputter() override { return true; } // Though deleted before opt
int instrCount() const override { return INSTR_COUNT_PLI; } int instrCount() const override { return INSTR_COUNT_PLI; }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
return m_off == VN_DBG_AS(samep, MonitorOff)->m_off; return m_off == VN_DBG_AS(samep, MonitorOff)->m_off;
} }
bool off() const { return m_off; } bool off() const { return m_off; }
@ -3259,7 +3259,7 @@ public:
ASTGEN_MEMBERS_AstRepeat; ASTGEN_MEMBERS_AstRepeat;
bool isGateOptimizable() const override { return false; } // Not relevant - converted to FOR bool isGateOptimizable() const override { return false; } // Not relevant - converted to FOR
int instrCount() const override { return INSTR_COUNT_BRANCH; } int instrCount() const override { return INSTR_COUNT_BRANCH; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
bool isFirstInMyListOfStatements(AstNode* n) const override { return n == stmtsp(); } bool isFirstInMyListOfStatements(AstNode* n) const override { return n == stmtsp(); }
}; };
class AstReturn final : public AstNodeStmt { class AstReturn final : public AstNodeStmt {
@ -3303,7 +3303,7 @@ public:
bool isOutputter() override { return false; } bool isOutputter() override { return false; }
virtual bool cleanOut() const { return false; } virtual bool cleanOut() const { return false; }
int instrCount() const override { return INSTR_COUNT_PLI; } int instrCount() const override { return INSTR_COUNT_PLI; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstStackTraceT final : public AstNodeStmt { class AstStackTraceT final : public AstNodeStmt {
// $stacktrace used as task // $stacktrace used as task
@ -3317,7 +3317,7 @@ public:
bool isPure() override { return false; } bool isPure() override { return false; }
bool isOutputter() override { return true; } bool isOutputter() override { return true; }
bool isUnlikely() const override { return true; } bool isUnlikely() const override { return true; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstStmtExpr final : public AstNodeStmt { class AstStmtExpr final : public AstNodeStmt {
// Expression in statement position // Expression in statement position
@ -3345,7 +3345,7 @@ public:
bool isOutputter() override { return true; } // SPECIAL: $display makes output bool isOutputter() override { return true; } // SPECIAL: $display makes output
bool isUnlikely() const override { return true; } bool isUnlikely() const override { return true; }
int instrCount() const override { return 0; } // Rarely executes int instrCount() const override { return 0; } // Rarely executes
bool same(const AstNode* samep) const override { return fileline() == samep->fileline(); } bool sameNode(const AstNode* samep) const override { return fileline() == samep->fileline(); }
string emitVerilog() const { return m_isFatal ? "$fatal" : "$stop"; } string emitVerilog() const { return m_isFatal ? "$fatal" : "$stop"; }
bool isFatal() const { return m_isFatal; } bool isFatal() const { return m_isFatal; }
}; };
@ -3365,7 +3365,7 @@ public:
bool isPure() override { return true; } bool isPure() override { return true; }
bool isOutputter() override { return false; } bool isOutputter() override { return false; }
int instrCount() const override { return 0; } int instrCount() const override { return 0; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstSystemT final : public AstNodeStmt { class AstSystemT final : public AstNodeStmt {
// $system used as task // $system used as task
@ -3382,7 +3382,7 @@ public:
bool isPure() override { return false; } bool isPure() override { return false; }
bool isOutputter() override { return true; } bool isOutputter() override { return true; }
bool isUnlikely() const override { return true; } bool isUnlikely() const override { return true; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstTimeFormat final : public AstNodeStmt { class AstTimeFormat final : public AstNodeStmt {
// Parents: stmtlist // Parents: stmtlist
@ -3440,7 +3440,7 @@ public:
string name() const override VL_MT_STABLE { return m_showname; } string name() const override VL_MT_STABLE { return m_showname; }
bool maybePointedTo() const override VL_MT_SAFE { return true; } bool maybePointedTo() const override VL_MT_SAFE { return true; }
bool hasDType() const override VL_MT_SAFE { return true; } bool hasDType() const override VL_MT_SAFE { return true; }
bool same(const AstNode* samep) const override { return false; } bool sameNode(const AstNode* samep) const override { return false; }
string showname() const { return m_showname; } // * = Var name string showname() const { return m_showname; } // * = Var name
// Details on what we're tracing // Details on what we're tracing
uint32_t code() const { return m_code; } uint32_t code() const { return m_code; }
@ -3481,7 +3481,7 @@ public:
void dumpJson(std::ostream& str) const override; void dumpJson(std::ostream& str) const override;
int instrCount() const override { return 10 + 2 * INSTR_COUNT_LD; } int instrCount() const override { return 10 + 2 * INSTR_COUNT_LD; }
bool hasDType() const override VL_MT_SAFE { return true; } bool hasDType() const override VL_MT_SAFE { return true; }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
return declp() == VN_DBG_AS(samep, TraceInc)->declp(); return declp() == VN_DBG_AS(samep, TraceInc)->declp();
} }
bool isGateOptimizable() const override { return false; } bool isGateOptimizable() const override { return false; }
@ -3497,7 +3497,7 @@ public:
explicit AstTracePopPrefix(FileLine* fl) explicit AstTracePopPrefix(FileLine* fl)
: ASTGEN_SUPER_TracePopPrefix(fl) {} : ASTGEN_SUPER_TracePopPrefix(fl) {}
ASTGEN_MEMBERS_AstTracePopPrefix; ASTGEN_MEMBERS_AstTracePopPrefix;
bool same(const AstNode* samep) const override { return false; } bool sameNode(const AstNode* samep) const override { return false; }
}; };
class AstTracePushPrefix final : public AstNodeStmt { class AstTracePushPrefix final : public AstNodeStmt {
const string m_prefix; // Prefix to add to signal names const string m_prefix; // Prefix to add to signal names
@ -3508,7 +3508,7 @@ public:
, m_prefix{prefix} , m_prefix{prefix}
, m_prefixType{prefixType} {} , m_prefixType{prefixType} {}
ASTGEN_MEMBERS_AstTracePushPrefix; ASTGEN_MEMBERS_AstTracePushPrefix;
bool same(const AstNode* samep) const override { return false; } bool sameNode(const AstNode* samep) const override { return false; }
string prefix() const { return m_prefix; } string prefix() const { return m_prefix; }
VTracePrefixType prefixType() const { return m_prefixType; } VTracePrefixType prefixType() const { return m_prefixType; }
}; };
@ -3525,7 +3525,7 @@ public:
bool isPredictOptimizable() const override { return false; } bool isPredictOptimizable() const override { return false; }
bool isPure() override { return false; } bool isPure() override { return false; }
bool isOutputter() override { return true; } bool isOutputter() override { return true; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
}; };
class AstWait final : public AstNodeStmt { class AstWait final : public AstNodeStmt {
// @astgen op1 := condp : AstNodeExpr // @astgen op1 := condp : AstNodeExpr
@ -3565,7 +3565,7 @@ public:
void dump(std::ostream& str) const override; void dump(std::ostream& str) const override;
bool isGateOptimizable() const override { return false; } bool isGateOptimizable() const override { return false; }
int instrCount() const override { return INSTR_COUNT_BRANCH; } int instrCount() const override { return INSTR_COUNT_BRANCH; }
bool same(const AstNode* /*samep*/) const override { return true; } bool sameNode(const AstNode* /*samep*/) const override { return true; }
// Stop statement searchback here // Stop statement searchback here
void addNextStmt(AstNode* newp, AstNode* belowp) override; void addNextStmt(AstNode* newp, AstNode* belowp) override;
bool isFirstInMyListOfStatements(AstNode* n) const override { return n == stmtsp(); } bool isFirstInMyListOfStatements(AstNode* n) const override { return n == stmtsp(); }
@ -3697,7 +3697,7 @@ public:
, m_casex{casex} {} , m_casex{casex} {}
ASTGEN_MEMBERS_AstCase; ASTGEN_MEMBERS_AstCase;
string verilogKwd() const override { return casez() ? "casez" : casex() ? "casex" : "case"; } string verilogKwd() const override { return casez() ? "casez" : casex() ? "casex" : "case"; }
bool same(const AstNode* samep) const override { bool sameNode(const AstNode* samep) const override {
return m_casex == VN_DBG_AS(samep, Case)->m_casex; return m_casex == VN_DBG_AS(samep, Case)->m_casex;
} }
bool casex() const { return m_casex == VCaseType::CT_CASEX; } bool casex() const { return m_casex == VCaseType::CT_CASEX; }

View File

@ -258,7 +258,7 @@ int AstBasicDType::widthTotalBytes() const {
} }
} }
bool AstBasicDType::same(const AstNode* samep) const { bool AstBasicDType::sameNode(const AstNode* samep) const {
const AstBasicDType* const sp = VN_DBG_AS(samep, BasicDType); const AstBasicDType* const sp = VN_DBG_AS(samep, BasicDType);
if (!(m == sp->m) || numeric() != sp->numeric()) return false; if (!(m == sp->m) || numeric() != sp->numeric()) return false;
if (!rangep() && !sp->rangep()) return true; if (!rangep() && !sp->rangep()) return true;
@ -1912,10 +1912,10 @@ AstMemberSel::AstMemberSel(FileLine* fl, AstNodeExpr* fromp, AstVar* varp)
this->varp(varp); this->varp(varp);
dtypep(varp->dtypep()); dtypep(varp->dtypep());
} }
bool AstMemberSel::same(const AstNode* samep) const { bool AstMemberSel::sameNode(const AstNode* samep) const {
const AstMemberSel* const sp = VN_DBG_AS(samep, MemberSel); const AstMemberSel* const sp = VN_DBG_AS(samep, MemberSel);
return sp != nullptr && access() == sp->access() && fromp()->isSame(sp->fromp()) return sp != nullptr && access() == sp->access() && fromp()->isSame(sp->fromp())
&& name() == sp->name() && varp()->same(sp->varp()); && name() == sp->name() && varp()->sameNode(sp->varp());
} }
void AstMemberSel::dump(std::ostream& str) const { void AstMemberSel::dump(std::ostream& str) const {
@ -2334,7 +2334,7 @@ void AstWildcardArrayDType::dumpSmall(std::ostream& str) const {
this->AstNodeDType::dumpSmall(str); this->AstNodeDType::dumpSmall(str);
str << "[*]"; str << "[*]";
} }
bool AstWildcardArrayDType::same(const AstNode* samep) const { bool AstWildcardArrayDType::sameNode(const AstNode* samep) const {
const AstWildcardArrayDType* const asamep = VN_DBG_AS(samep, WildcardArrayDType); const AstWildcardArrayDType* const asamep = VN_DBG_AS(samep, WildcardArrayDType);
if (!asamep->subDTypep()) return false; if (!asamep->subDTypep()) return false;
return (subDTypep() == asamep->subDTypep()); return (subDTypep() == asamep->subDTypep());
@ -2353,7 +2353,7 @@ void AstUnsizedArrayDType::dumpSmall(std::ostream& str) const {
this->AstNodeDType::dumpSmall(str); this->AstNodeDType::dumpSmall(str);
str << "[]"; str << "[]";
} }
bool AstUnsizedArrayDType::same(const AstNode* samep) const { bool AstUnsizedArrayDType::sameNode(const AstNode* samep) const {
const AstUnsizedArrayDType* const asamep = VN_DBG_AS(samep, UnsizedArrayDType); const AstUnsizedArrayDType* const asamep = VN_DBG_AS(samep, UnsizedArrayDType);
if (!asamep->subDTypep()) return false; if (!asamep->subDTypep()) return false;
return (subDTypep() == asamep->subDTypep()); return (subDTypep() == asamep->subDTypep());
@ -2391,9 +2391,9 @@ void AstVarScope::dumpJson(std::ostream& str) const {
dumpJsonBoolFunc(str, isTrace); dumpJsonBoolFunc(str, isTrace);
dumpJsonGen(str); dumpJsonGen(str);
} }
bool AstVarScope::same(const AstNode* samep) const { bool AstVarScope::sameNode(const AstNode* samep) const {
const AstVarScope* const asamep = VN_DBG_AS(samep, VarScope); const AstVarScope* const asamep = VN_DBG_AS(samep, VarScope);
return varp()->same(asamep->varp()) && scopep()->same(asamep->scopep()); return varp()->sameNode(asamep->varp()) && scopep()->sameNode(asamep->scopep());
} }
void AstNodeVarRef::dump(std::ostream& str) const { void AstNodeVarRef::dump(std::ostream& str) const {
this->AstNodeExpr::dump(str); this->AstNodeExpr::dump(str);
@ -2436,7 +2436,7 @@ const char* AstVarRef::broken() const {
BROKEN_RTN(!varp()); BROKEN_RTN(!varp());
return nullptr; return nullptr;
} }
bool AstVarRef::same(const AstNode* samep) const { return same(VN_DBG_AS(samep, VarRef)); } bool AstVarRef::sameNode(const AstNode* samep) const { return sameNode(VN_DBG_AS(samep, VarRef)); }
int AstVarRef::instrCount() const { int AstVarRef::instrCount() const {
// Account for the target of hard-coded method calls as just an address computation // Account for the target of hard-coded method calls as just an address computation
if (const AstCMethodHard* const callp = VN_CAST(backp(), CMethodHard)) { if (const AstCMethodHard* const callp = VN_CAST(backp(), CMethodHard)) {
@ -2502,7 +2502,7 @@ void AstVar::dumpJson(std::ostream& str) const {
dumpJsonBoolFunc(str, attrSFormat); dumpJsonBoolFunc(str, attrSFormat);
dumpJsonGen(str); dumpJsonGen(str);
} }
bool AstVar::same(const AstNode* samep) const { bool AstVar::sameNode(const AstNode* samep) const {
const AstVar* const asamep = VN_DBG_AS(samep, Var); const AstVar* const asamep = VN_DBG_AS(samep, Var);
return name() == asamep->name() && varType() == asamep->varType(); return name() == asamep->name() && varType() == asamep->varType();
} }
@ -2520,7 +2520,7 @@ void AstScope::dump(std::ostream& str) const {
str << " [modp=" << nodeAddr(modp()) << "]"; str << " [modp=" << nodeAddr(modp()) << "]";
} }
void AstScope::dumpJson(std::ostream& str) const { dumpJsonGen(str); } void AstScope::dumpJson(std::ostream& str) const { dumpJsonGen(str); }
bool AstScope::same(const AstNode* samep) const { bool AstScope::sameNode(const AstNode* samep) const {
const AstScope* const asamep = VN_DBG_AS(samep, Scope); const AstScope* const asamep = VN_DBG_AS(samep, Scope);
return name() == asamep->name() return name() == asamep->name()
&& ((!aboveScopep() && !asamep->aboveScopep()) && ((!aboveScopep() && !asamep->aboveScopep())

View File

@ -227,7 +227,7 @@ class ConstBitOpTreeVisitor final : public VNVisitorConst {
return m_knownResult == 1; return m_knownResult == 1;
} }
const AstVarRef* refp() const { return m_refp; } const AstVarRef* refp() const { return m_refp; }
bool sameVarAs(const AstNodeVarRef* otherp) const { return m_refp->same(otherp); } bool sameVarAs(const AstNodeVarRef* otherp) const { return m_refp->sameNode(otherp); }
void setPolarity(bool compBit, int bit) { void setPolarity(bool compBit, int bit) {
// Ignore if already determined a known reduction // Ignore if already determined a known reduction
if (m_knownResult >= 0) return; if (m_knownResult >= 0) return;

View File

@ -1190,7 +1190,7 @@ class GateMergeAssignments final {
AstSel* merge(AstSel* prevSelp, AstSel* currSelp) { AstSel* merge(AstSel* prevSelp, AstSel* currSelp) {
const AstVarRef* const pRefp = VN_CAST(prevSelp->fromp(), VarRef); const AstVarRef* const pRefp = VN_CAST(prevSelp->fromp(), VarRef);
AstVarRef* const cRefp = VN_CAST(currSelp->fromp(), VarRef); AstVarRef* const cRefp = VN_CAST(currSelp->fromp(), VarRef);
if (!pRefp || !cRefp || !cRefp->same(pRefp)) return nullptr; // not the same var if (!pRefp || !cRefp || !cRefp->sameNode(pRefp)) return nullptr; // not the same var
const AstConst* const pstart = VN_CAST(prevSelp->lsbp(), Const); const AstConst* const pstart = VN_CAST(prevSelp->lsbp(), Const);
const AstConst* const pwidth = VN_CAST(prevSelp->widthp(), Const); const AstConst* const pwidth = VN_CAST(prevSelp->widthp(), Const);