diff --git a/src/V3AstNodeDType.h b/src/V3AstNodeDType.h index 69b2f5bec..d06961356 100644 --- a/src/V3AstNodeDType.h +++ b/src/V3AstNodeDType.h @@ -82,7 +82,7 @@ public: // Iff has second dtype, set as generic node function virtual void virtRefDType2p(AstNodeDType* nodep) {} // Assignable equivalence. Call skipRefp() on this and samep before calling - virtual bool similarDType(AstNodeDType* samep) const = 0; + virtual bool similarDType(const AstNodeDType* samep) const = 0; // Iff has a non-null subDTypep(), as generic node function virtual AstNodeDType* subDTypep() const { return nullptr; } virtual bool isFourstate() const; @@ -161,7 +161,7 @@ public: return (hi() == asamep->hi() && subDTypep() == asamep->subDTypep() && rangenp()->sameTree(asamep->rangenp())); } // HashedDT doesn't recurse, so need to check children - bool similarDType(AstNodeDType* samep) const override { + bool similarDType(const AstNodeDType* samep) const override { const AstNodeArrayDType* const asamep = static_cast(samep); return (asamep && type() == samep->type() && hi() == asamep->hi() && rangenp()->sameTree(asamep->rangenp()) @@ -235,7 +235,7 @@ public: int widthAlignBytes() const override; // (Slow) recurses - Width in bytes rounding up 1,2,4,8,12,... int widthTotalBytes() const override; - bool similarDType(AstNodeDType* samep) const override { + bool similarDType(const AstNodeDType* samep) const override { return this == samep; // We don't compare members, require exact equivalence } string name() const override { return m_name; } @@ -321,7 +321,7 @@ public: if (!asamep->keyDTypep()) return false; return (subDTypep() == asamep->subDTypep() && keyDTypep() == asamep->keyDTypep()); } - bool similarDType(AstNodeDType* samep) const override { + bool similarDType(const AstNodeDType* samep) const override { const AstAssocArrayDType* const asamep = static_cast(samep); return type() == samep->type() && asamep->subDTypep() && subDTypep()->skipRefp()->similarDType(asamep->subDTypep()->skipRefp()); @@ -399,7 +399,7 @@ public: const AstBasicDType* const sp = static_cast(samep); return m == sp->m; } - bool similarDType(AstNodeDType* samep) const override { + bool similarDType(const AstNodeDType* samep) const override { return type() == samep->type() && same(samep); } string name() const override { return m.m_keyword.ascii(); } @@ -483,7 +483,7 @@ public: this->elementsp(elementsp); } ASTGEN_MEMBERS_AstBracketArrayDType; - bool similarDType(AstNodeDType* samep) const override { V3ERROR_NA_RETURN(false); } + bool similarDType(const AstNodeDType* samep) const override { V3ERROR_NA_RETURN(false); } AstNodeDType* subDTypep() const override { return childDTypep(); } // METHODS // Will be removed in V3Width, which relies on this @@ -518,7 +518,7 @@ public: const AstClassRefDType* const asamep = static_cast(samep); return (m_classp == asamep->m_classp && m_classOrPackagep == asamep->m_classOrPackagep); } - bool similarDType(AstNodeDType* samep) const override { + bool similarDType(const AstNodeDType* samep) const override { return this == samep || (type() == samep->type() && same(samep)); } void dump(std::ostream& str = std::cout) const override; @@ -567,7 +567,7 @@ public: const AstConstDType* const sp = static_cast(samep); return (m_refDTypep == sp->m_refDTypep); } - bool similarDType(AstNodeDType* samep) const override { + bool similarDType(const AstNodeDType* samep) const override { return skipRefp()->similarDType(samep->skipRefp()); } AstNodeDType* getChildDTypep() const override { return childDTypep(); } @@ -614,7 +614,7 @@ public: const AstDefImplicitDType* const sp = static_cast(samep); return uniqueNum() == sp->uniqueNum(); } - bool similarDType(AstNodeDType* samep) const override { + bool similarDType(const AstNodeDType* samep) const override { return type() == samep->type() && same(samep); } AstNodeDType* getChildDTypep() const override { return childDTypep(); } @@ -664,7 +664,7 @@ public: if (!asamep->subDTypep()) return false; return subDTypep() == asamep->subDTypep(); } - bool similarDType(AstNodeDType* samep) const override { + bool similarDType(const AstNodeDType* samep) const override { const AstAssocArrayDType* const asamep = static_cast(samep); return type() == samep->type() && asamep->subDTypep() && subDTypep()->skipRefp()->similarDType(asamep->subDTypep()->skipRefp()); @@ -702,7 +702,7 @@ public: AstNodeDType* subDTypep() const override { return nullptr; } AstNodeDType* virtRefDTypep() const override { return nullptr; } void virtRefDTypep(AstNodeDType* nodep) override {} - bool similarDType(AstNodeDType* samep) const override { return this == samep; } + bool similarDType(const AstNodeDType* samep) const override { return this == samep; } AstBasicDType* basicp() const override VL_MT_SAFE { return nullptr; } // cppcheck-suppress csyleCast AstNodeDType* skipRefp() const override VL_MT_SAFE { return (AstNodeDType*)this; } @@ -747,7 +747,7 @@ public: const AstEnumDType* const sp = static_cast(samep); return uniqueNum() == sp->uniqueNum(); } - bool similarDType(AstNodeDType* samep) const override { return this == samep; } + bool similarDType(const AstNodeDType* samep) const override { return this == samep; } AstNodeDType* getChildDTypep() const override { return childDTypep(); } AstNodeDType* subDTypep() const override { return m_refDTypep ? m_refDTypep : childDTypep(); } void refDTypep(AstNodeDType* nodep) { m_refDTypep = nodep; } @@ -815,7 +815,7 @@ public: AstNodeDType* skipRefp() const override VL_MT_SAFE { return (AstNodeDType*)this; } AstNodeDType* skipRefToConstp() const override { return (AstNodeDType*)this; } AstNodeDType* skipRefToEnump() const override { return (AstNodeDType*)this; } - bool similarDType(AstNodeDType* samep) const override { return this == samep; } + bool similarDType(const AstNodeDType* samep) const override { return this == samep; } int widthAlignBytes() const override { return 1; } int widthTotalBytes() const override { return 1; } FileLine* modportFileline() const { return m_modportFileline; } @@ -876,7 +876,7 @@ public: void refDTypep(AstNodeDType* nodep) { m_refDTypep = nodep; } AstNodeDType* virtRefDTypep() const override { return m_refDTypep; } void virtRefDTypep(AstNodeDType* nodep) override { refDTypep(nodep); } - bool similarDType(AstNodeDType* samep) const override { return this == samep; } + bool similarDType(const AstNodeDType* samep) const override { return this == samep; } // // (Slow) recurse down to find basic data type (Note don't need virtual - // AstVar isn't a NodeDType) @@ -925,7 +925,7 @@ public: AstNodeDType* skipRefp() const override VL_MT_SAFE { return subDTypep()->skipRefp(); } AstNodeDType* skipRefToConstp() const override { return subDTypep()->skipRefToConstp(); } AstNodeDType* skipRefToEnump() const override { return subDTypep()->skipRefToEnump(); } - bool similarDType(AstNodeDType* samep) const override { + bool similarDType(const AstNodeDType* samep) const override { const AstParamTypeDType* const sp = static_cast(samep); return type() == samep->type() && sp && this->subDTypep()->skipRefp()->similarDType(sp->subDTypep()->skipRefp()); @@ -955,7 +955,7 @@ public: ASTGEN_MEMBERS_AstParseTypeDType; AstNodeDType* dtypep() const { return nullptr; } // METHODS - bool similarDType(AstNodeDType* samep) const override { return this == samep; } + bool similarDType(const AstNodeDType* samep) const override { return this == samep; } AstBasicDType* basicp() const override VL_MT_SAFE { return nullptr; } AstNodeDType* skipRefp() const override VL_MT_SAFE { return nullptr; } // cppcheck-suppress csyleCast @@ -1003,7 +1003,7 @@ public: if (!asamep->subDTypep()) return false; return (subDTypep() == asamep->subDTypep()); } - bool similarDType(AstNodeDType* samep) const override { + bool similarDType(const AstNodeDType* samep) const override { const AstQueueDType* const asamep = static_cast(samep); return type() == samep->type() && asamep->subDTypep() && subDTypep()->skipRefp()->similarDType(asamep->subDTypep()->skipRefp()); @@ -1066,7 +1066,7 @@ public: return (m_typedefp == asamep->m_typedefp && m_refDTypep == asamep->m_refDTypep && m_name == asamep->m_name && m_classOrPackagep == asamep->m_classOrPackagep); } - bool similarDType(AstNodeDType* samep) const override { + bool similarDType(const AstNodeDType* samep) const override { return skipRefp()->similarDType(samep->skipRefp()); } void dump(std::ostream& str = std::cout) const override; @@ -1143,7 +1143,7 @@ public: if (m_refDTypep && m_refDTypep->clonep()) m_refDTypep = m_refDTypep->clonep(); } bool same(const AstNode* samep) const override; - bool similarDType(AstNodeDType* samep) const override; + bool similarDType(const AstNodeDType* samep) const override; void dumpSmall(std::ostream& str) const override; AstNodeDType* getChildDTypep() const override { return childDTypep(); } AstNodeDType* subDTypep() const override { return m_refDTypep ? m_refDTypep : childDTypep(); } @@ -1174,7 +1174,7 @@ public: AstNodeDType* subDTypep() const override { return nullptr; } AstNodeDType* virtRefDTypep() const override { return nullptr; } void virtRefDTypep(AstNodeDType* nodep) override {} - bool similarDType(AstNodeDType* samep) const override { return this == samep; } + bool similarDType(const AstNodeDType* samep) const override { return this == samep; } AstBasicDType* basicp() const override VL_MT_SAFE { return nullptr; } // cppcheck-suppress csyleCast AstNodeDType* skipRefp() const override VL_MT_SAFE { return (AstNodeDType*)this; } @@ -1208,7 +1208,7 @@ public: if (m_refDTypep && m_refDTypep->clonep()) m_refDTypep = m_refDTypep->clonep(); } bool same(const AstNode* samep) const override; - bool similarDType(AstNodeDType* samep) const override; + bool similarDType(const AstNodeDType* samep) const override; void dumpSmall(std::ostream& str) const override; AstNodeDType* getChildDTypep() const override { return childDTypep(); } AstNodeDType* subDTypep() const override VL_MT_SAFE { diff --git a/src/V3AstNodes.cpp b/src/V3AstNodes.cpp index bb4be9ecf..6d833054e 100644 --- a/src/V3AstNodes.cpp +++ b/src/V3AstNodes.cpp @@ -1994,7 +1994,7 @@ bool AstWildcardArrayDType::same(const AstNode* samep) const { if (!asamep->subDTypep()) return false; return (subDTypep() == asamep->subDTypep()); } -bool AstWildcardArrayDType::similarDType(AstNodeDType* samep) const { +bool AstWildcardArrayDType::similarDType(const AstNodeDType* samep) const { const AstNodeArrayDType* const asamep = static_cast(samep); return type() == samep->type() && asamep->subDTypep() && subDTypep()->skipRefp()->similarDType(asamep->subDTypep()->skipRefp()); @@ -2008,7 +2008,7 @@ bool AstUnsizedArrayDType::same(const AstNode* samep) const { if (!asamep->subDTypep()) return false; return (subDTypep() == asamep->subDTypep()); } -bool AstUnsizedArrayDType::similarDType(AstNodeDType* samep) const { +bool AstUnsizedArrayDType::similarDType(const AstNodeDType* samep) const { const AstNodeArrayDType* const asamep = static_cast(samep); return type() == samep->type() && asamep->subDTypep() && subDTypep()->skipRefp()->similarDType(asamep->subDTypep()->skipRefp());