From 7efa0fc82a3ed444d6753952c4cfddc1a1093732 Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Fri, 29 Nov 2024 08:10:51 -0500 Subject: [PATCH] Internals: Rewrite skipRefp to avoid recursion and fix const-ness. No functional change intended. --- src/V3AstNodeDType.h | 139 ++++++----------------------------------- src/V3AstNodes.cpp | 21 ++++++- src/V3Class.cpp | 4 +- src/V3EmitCHeaders.cpp | 2 +- src/V3HierBlock.cpp | 2 +- src/V3Param.cpp | 6 +- src/V3Width.cpp | 2 +- 7 files changed, 47 insertions(+), 129 deletions(-) diff --git a/src/V3AstNodeDType.h b/src/V3AstNodeDType.h index 3e419d09f..ee588bd33 100644 --- a/src/V3AstNodeDType.h +++ b/src/V3AstNodeDType.h @@ -48,6 +48,10 @@ protected: AstNodeDType(VNType t, FileLine* fl) : AstNode{t, fl} {} +private: + // METHODS + const AstNodeDType* skipRefIterp(bool skipConst, bool skipEnum) const VL_MT_STABLE; + public: ASTGEN_MEMBERS_AstNodeDType; // ACCESSORS @@ -65,11 +69,23 @@ public: // (Slow) recurse down to find basic data type virtual AstBasicDType* basicp() const VL_MT_STABLE = 0; // (Slow) Recurse over MemberDType|ParamTypeDType|RefDType|ConstDType|EnumDType to other type - virtual AstNodeDType* skipRefp() const VL_MT_STABLE = 0; + const AstNodeDType* skipRefp() const VL_MT_STABLE { return skipRefIterp(true, true); } + AstNodeDType* skipRefp() VL_MT_STABLE { + return const_cast( + static_cast(this)->skipRefIterp(true, true)); + } // (Slow) Recurse over MemberDType|ParamTypeDType|RefDType|EnumDType to ConstDType - virtual AstNodeDType* skipRefToConstp() const = 0; + const AstNodeDType* skipRefToConstp() const { return skipRefIterp(false, true); } + AstNodeDType* skipRefToConstp() { + return const_cast( + static_cast(this)->skipRefIterp(false, true)); + } // (Slow) Recurse over MemberDType|ParamTypeDType|RefDType|ConstDType to EnumDType - virtual AstNodeDType* skipRefToEnump() const = 0; + const AstNodeDType* skipRefToEnump() const { return skipRefIterp(true, false); } + AstNodeDType* skipRefToEnump() { + return const_cast( + static_cast(this)->skipRefIterp(true, false)); + } // (Slow) recurses - Structure alignment 1,2,4 or 8 bytes (arrays affect this) virtual int widthAlignBytes() const = 0; // (Slow) recurses - Width in bytes rounding up 1,2,4,8,12,... @@ -177,9 +193,6 @@ public: AstBasicDType* basicp() const override VL_MT_STABLE { return subDTypep()->basicp(); } // (Slow) recurse down to find basic data type - AstNodeDType* skipRefp() const override VL_MT_STABLE { return (AstNodeDType*)this; } - AstNodeDType* skipRefToConstp() const override { return (AstNodeDType*)this; } - AstNodeDType* skipRefToEnump() const override { return (AstNodeDType*)this; } int widthAlignBytes() const override { return subDTypep()->widthAlignBytes(); } int widthTotalBytes() const override { return elementsConst() * subDTypep()->widthTotalBytes(); @@ -232,9 +245,6 @@ public: : VN_AS(findBitRangeDType(VNumRange{width() - 1, 0}, width(), numeric()), BasicDType)); } - AstNodeDType* skipRefp() const override VL_MT_STABLE { return (AstNodeDType*)this; } - AstNodeDType* skipRefToConstp() const override { return (AstNodeDType*)this; } - AstNodeDType* skipRefToEnump() const override { return (AstNodeDType*)this; } // (Slow) recurses - Structure alignment 1,2,4 or 8 bytes (arrays affect this) int widthAlignBytes() const override; // (Slow) recurses - Width in bytes rounding up 1,2,4,8,12,... @@ -342,9 +352,6 @@ public: void keyDTypep(AstNodeDType* nodep) { m_keyDTypep = nodep; } // METHODS AstBasicDType* basicp() const override VL_MT_STABLE { return nullptr; } - AstNodeDType* skipRefp() const override VL_MT_STABLE { return (AstNodeDType*)this; } - AstNodeDType* skipRefToConstp() const override { return (AstNodeDType*)this; } - AstNodeDType* skipRefToEnump() const override { return (AstNodeDType*)this; } int widthAlignBytes() const override { return subDTypep()->widthAlignBytes(); } int widthTotalBytes() const override { return subDTypep()->widthTotalBytes(); } bool isCompound() const override { return true; } @@ -412,9 +419,6 @@ public: } // METHODS AstBasicDType* basicp() const override VL_MT_STABLE { return (AstBasicDType*)this; } - AstNodeDType* skipRefp() const override VL_MT_STABLE { return (AstNodeDType*)this; } - AstNodeDType* skipRefToConstp() const override { return (AstNodeDType*)this; } - AstNodeDType* skipRefToEnump() const override { return (AstNodeDType*)this; } // (Slow) recurses - Structure alignment 1,2,4 or 8 bytes (arrays affect this) int widthAlignBytes() const override; // (Slow) recurses - Width in bytes rounding up 1,2,4,8,12,... @@ -489,9 +493,6 @@ public: // being a child not a dtype pointed node bool maybePointedTo() const override VL_MT_SAFE { return false; } AstBasicDType* basicp() const override VL_MT_STABLE { return nullptr; } - AstNodeDType* skipRefp() const override VL_MT_STABLE { return (AstNodeDType*)this; } - AstNodeDType* skipRefToConstp() const override { return (AstNodeDType*)this; } - AstNodeDType* skipRefToEnump() const override { return (AstNodeDType*)this; } int widthAlignBytes() const override { V3ERROR_NA_RETURN(0); } int widthTotalBytes() const override { V3ERROR_NA_RETURN(0); } bool isCompound() const override { return true; } @@ -517,9 +518,6 @@ public: string prettyDTypeName(bool) const override { return m_name; } // METHODS AstBasicDType* basicp() const override VL_MT_STABLE { return nullptr; } - AstNodeDType* skipRefp() const override VL_MT_STABLE { return (AstNodeDType*)this; } - AstNodeDType* skipRefToConstp() const override { return (AstNodeDType*)this; } - AstNodeDType* skipRefToEnump() const override { return (AstNodeDType*)this; } int widthAlignBytes() const override { return 8; } // Assume int widthTotalBytes() const override { return 8; } // Assume bool isCompound() const override { return true; } @@ -564,9 +562,6 @@ public: string prettyDTypeName(bool full) const override; string name() const override VL_MT_STABLE; AstBasicDType* basicp() const override VL_MT_STABLE { return nullptr; } - AstNodeDType* skipRefp() const override VL_MT_STABLE { return (AstNodeDType*)this; } - AstNodeDType* skipRefToConstp() const override { return (AstNodeDType*)this; } - AstNodeDType* skipRefToEnump() const override { return (AstNodeDType*)this; } int widthAlignBytes() const override { return 0; } int widthTotalBytes() const override { return 0; } AstNodeDType* virtRefDTypep() const override { return nullptr; } @@ -614,9 +609,6 @@ public: void virtRefDTypep(AstNodeDType* nodep) override { refDTypep(nodep); } // METHODS AstBasicDType* basicp() const override VL_MT_STABLE { return subDTypep()->basicp(); } - AstNodeDType* skipRefp() const override VL_MT_STABLE { return subDTypep()->skipRefp(); } - AstNodeDType* skipRefToConstp() const override { return (AstNodeDType*)this; } - AstNodeDType* skipRefToEnump() const override { return subDTypep()->skipRefToEnump(); } int widthAlignBytes() const override { return subDTypep()->widthAlignBytes(); } int widthTotalBytes() const override { return subDTypep()->widthTotalBytes(); } bool isCompound() const override { @@ -640,12 +632,6 @@ public: void virtRefDTypep(AstNodeDType* nodep) override {} bool similarDType(const AstNodeDType* samep) const override { return this == samep; } AstBasicDType* basicp() const override VL_MT_STABLE { return nullptr; } - // cppcheck-suppress csyleCast - AstNodeDType* skipRefp() const override VL_MT_STABLE { return (AstNodeDType*)this; } - // cppcheck-suppress csyleCast - AstNodeDType* skipRefToConstp() const override { return (AstNodeDType*)this; } - // cppcheck-suppress csyleCast - AstNodeDType* skipRefToEnump() const override { return (AstNodeDType*)this; } int widthAlignBytes() const override { return 1; } int widthTotalBytes() const override { return 1; } bool isCompound() const override { return false; } @@ -693,9 +679,6 @@ public: // op1 = Range of variable AstNodeDType* dtypeSkipRefp() const { return dtypep()->skipRefp(); } AstBasicDType* basicp() const override VL_MT_STABLE { return subDTypep()->basicp(); } - AstNodeDType* skipRefp() const override VL_MT_STABLE { return (AstNodeDType*)this; } - AstNodeDType* skipRefToConstp() const override { return (AstNodeDType*)this; } - AstNodeDType* skipRefToEnump() const override { return (AstNodeDType*)this; } int widthAlignBytes() const override { return dtypep()->widthAlignBytes(); } int widthTotalBytes() const override { return dtypep()->widthTotalBytes(); } string name() const override VL_MT_STABLE { return m_name; } @@ -746,9 +729,6 @@ public: void virtRefDTypep(AstNodeDType* nodep) override { refDTypep(nodep); } // METHODS AstBasicDType* basicp() const override VL_MT_STABLE { return nullptr; } - AstNodeDType* skipRefp() const override VL_MT_STABLE { return (AstNodeDType*)this; } - AstNodeDType* skipRefToConstp() const override { return (AstNodeDType*)this; } - AstNodeDType* skipRefToEnump() const override { return (AstNodeDType*)this; } int widthAlignBytes() const override { return subDTypep()->widthAlignBytes(); } int widthTotalBytes() const override { return subDTypep()->widthTotalBytes(); } bool isCompound() const override { return true; } @@ -770,12 +750,6 @@ public: void virtRefDTypep(AstNodeDType* nodep) override {} bool similarDType(const AstNodeDType* samep) const override { return this == samep; } AstBasicDType* basicp() const override VL_MT_STABLE { return nullptr; } - // cppcheck-suppress csyleCast - AstNodeDType* skipRefp() const override VL_MT_STABLE { return (AstNodeDType*)this; } - // cppcheck-suppress csyleCast - AstNodeDType* skipRefToConstp() const override { return (AstNodeDType*)this; } - // cppcheck-suppress csyleCast - AstNodeDType* skipRefToEnump() const override { return (AstNodeDType*)this; } int widthAlignBytes() const override { return 1; } int widthTotalBytes() const override { return 1; } bool isCompound() const override { return false; } @@ -832,10 +806,6 @@ public: string prettyDTypeName(bool full) const override; // METHODS AstBasicDType* basicp() const override VL_MT_STABLE { return subDTypep()->basicp(); } - AstNodeDType* skipRefp() const override VL_MT_STABLE { return subDTypep()->skipRefp(); } - AstNodeDType* skipRefToConstp() const override { return subDTypep()->skipRefToConstp(); } - // cppcheck-suppress csyleCast - AstNodeDType* skipRefToEnump() const override { return (AstNodeDType*)this; } int widthAlignBytes() const override { return subDTypep()->widthAlignBytes(); } int widthTotalBytes() const override { return subDTypep()->widthTotalBytes(); } size_t itemCount() const { @@ -890,9 +860,6 @@ public: void dumpJson(std::ostream& str = std::cout) const override; void dumpSmall(std::ostream& str) const override; AstBasicDType* basicp() const override VL_MT_STABLE { return nullptr; } - AstNodeDType* skipRefp() const override VL_MT_STABLE { return (AstNodeDType*)this; } - AstNodeDType* skipRefToConstp() const override { return (AstNodeDType*)this; } - AstNodeDType* skipRefToEnump() const override { return (AstNodeDType*)this; } bool similarDType(const AstNodeDType* samep) const override { return this == samep; } int widthAlignBytes() const override { return 0; } int widthTotalBytes() const override { return 0; } @@ -955,7 +922,7 @@ public: bool hasDType() const override VL_MT_SAFE { return true; } bool maybePointedTo() const override VL_MT_SAFE { return true; } AstNodeDType* getChildDTypep() const override { return childDTypep(); } - AstNodeUOrStructDType* getChildStructp() const; + AstNodeUOrStructDType* getChildStructp(); AstNodeDType* subDTypep() const override VL_MT_STABLE { return m_refDTypep ? m_refDTypep : childDTypep(); } @@ -969,9 +936,6 @@ public: AstBasicDType* basicp() const override VL_MT_STABLE { return subDTypep()->basicp(); } // op1 = Range of variable (Note don't need virtual - AstVar isn't a NodeDType) AstNodeDType* dtypeSkipRefp() const { return subDTypep()->skipRefp(); } - AstNodeDType* skipRefp() const override VL_MT_STABLE { return subDTypep()->skipRefp(); } - AstNodeDType* skipRefToConstp() const override { return subDTypep()->skipRefToConstp(); } - AstNodeDType* skipRefToEnump() const override { return subDTypep()->skipRefToEnump(); } // (Slow) recurses - Structure alignment 1,2,4 or 8 bytes (arrays affect this) int widthAlignBytes() const override { return subDTypep()->widthAlignBytes(); } // (Slow) recurses - Width in bytes rounding up 1,2,4,8,12,... @@ -1004,9 +968,6 @@ public: bool partial() const { return m_partial; } bool similarDType(const AstNodeDType* samep) const override { return this == samep; } AstBasicDType* basicp() const override VL_MT_STABLE { return nullptr; } - AstNodeDType* skipRefp() const override VL_MT_STABLE { return (AstNodeDType*)this; } - AstNodeDType* skipRefToConstp() const override { return (AstNodeDType*)this; } - AstNodeDType* skipRefToEnump() const override { return (AstNodeDType*)this; } int widthAlignBytes() const override { return 1; } int widthTotalBytes() const override { return 24; } bool isCompound() const override { return true; } @@ -1034,9 +995,6 @@ public: return dtypep() ? dtypep() : childDTypep(); } AstBasicDType* basicp() const override VL_MT_STABLE { return subDTypep()->basicp(); } - AstNodeDType* skipRefp() const override VL_MT_STABLE { return subDTypep()->skipRefp(); } - AstNodeDType* skipRefToConstp() const override { return subDTypep()->skipRefToConstp(); } - AstNodeDType* skipRefToEnump() const override { return subDTypep()->skipRefToEnump(); } bool similarDType(const AstNodeDType* samep) const override { if (type() != samep->type()) return false; const AstParamTypeDType* const sp = VN_DBG_AS(samep, ParamTypeDType); @@ -1069,11 +1027,6 @@ public: // METHODS bool similarDType(const AstNodeDType* samep) const override { return this == samep; } AstBasicDType* basicp() const override VL_MT_STABLE { return nullptr; } - AstNodeDType* skipRefp() const override VL_MT_STABLE { return (AstNodeDType*)this; } - // cppcheck-suppress csyleCast - AstNodeDType* skipRefToConstp() const override { return (AstNodeDType*)this; } - // cppcheck-suppress csyleCast - AstNodeDType* skipRefToEnump() const override { return (AstNodeDType*)this; } int widthAlignBytes() const override { return 0; } int widthTotalBytes() const override { return 0; } bool isCompound() const override { @@ -1129,12 +1082,6 @@ public: void virtRefDTypep(AstNodeDType* nodep) override { refDTypep(nodep); } // METHODS AstBasicDType* basicp() const override VL_MT_STABLE { return nullptr; } - // cppcheck-suppress csyleCast - AstNodeDType* skipRefp() const override VL_MT_STABLE { return (AstNodeDType*)this; } - // cppcheck-suppress csyleCast - AstNodeDType* skipRefToConstp() const override { return (AstNodeDType*)this; } - // cppcheck-suppress csyleCast - AstNodeDType* skipRefToEnump() const override { return (AstNodeDType*)this; } int widthAlignBytes() const override { return subDTypep()->widthAlignBytes(); } int widthTotalBytes() const override { return subDTypep()->widthTotalBytes(); } bool isCompound() const override { return true; } @@ -1188,31 +1135,6 @@ public: return subDTypep() ? subDTypep()->basicp() : nullptr; } AstNodeDType* subDTypep() const override VL_MT_STABLE; - AstNodeDType* skipRefp() const override VL_MT_STABLE { - // Skip past both the Ref and the Typedef - if (subDTypep()) { - return subDTypep()->skipRefp(); - } else { - v3fatalSrc("Typedef not linked"); - return nullptr; - } - } - AstNodeDType* skipRefToConstp() const override { - if (subDTypep()) { - return subDTypep()->skipRefToConstp(); - } else { - v3fatalSrc("Typedef not linked"); - return nullptr; - } - } - AstNodeDType* skipRefToEnump() const override { - if (subDTypep()) { - return subDTypep()->skipRefToEnump(); - } else { - v3fatalSrc("Typedef not linked"); - return nullptr; - } - } int widthAlignBytes() const override { return dtypeSkipRefp()->widthAlignBytes(); } int widthTotalBytes() const override { return dtypeSkipRefp()->widthTotalBytes(); } void name(const string& flag) override { m_name = flag; } @@ -1267,9 +1189,6 @@ public: void virtRefDTypep(AstNodeDType* nodep) override { refDTypep(nodep); } // METHODS AstBasicDType* basicp() const override VL_MT_STABLE { return subDTypep()->basicp(); } - AstNodeDType* skipRefp() const override VL_MT_STABLE { return (AstNodeDType*)this; } - AstNodeDType* skipRefToConstp() const override { return (AstNodeDType*)this; } - AstNodeDType* skipRefToEnump() const override { return (AstNodeDType*)this; } int widthAlignBytes() const override { return sizeof(std::map); } int widthTotalBytes() const override { return sizeof(std::map); } bool isCompound() const override { return true; } @@ -1292,12 +1211,6 @@ public: void virtRefDTypep(AstNodeDType* nodep) override {} bool similarDType(const AstNodeDType* samep) const override { return this == samep; } AstBasicDType* basicp() const override VL_MT_STABLE { return nullptr; } - // cppcheck-suppress csyleCast - AstNodeDType* skipRefp() const override VL_MT_STABLE { return (AstNodeDType*)this; } - // cppcheck-suppress csyleCast - AstNodeDType* skipRefToConstp() const override { return (AstNodeDType*)this; } - // cppcheck-suppress csyleCast - AstNodeDType* skipRefToEnump() const override { return (AstNodeDType*)this; } int widthAlignBytes() const override { return 1; } int widthTotalBytes() const override { return 1; } bool isCompound() const override { return false; } @@ -1336,9 +1249,6 @@ public: void virtRefDTypep(AstNodeDType* nodep) override { refDTypep(nodep); } // METHODS AstBasicDType* basicp() const override VL_MT_STABLE { return subDTypep()->basicp(); } - AstNodeDType* skipRefp() const override VL_MT_STABLE { return (AstNodeDType*)this; } - AstNodeDType* skipRefToConstp() const override { return (AstNodeDType*)this; } - AstNodeDType* skipRefToEnump() const override { return (AstNodeDType*)this; } int widthAlignBytes() const override { return subDTypep()->widthAlignBytes(); } int widthTotalBytes() const override { return subDTypep()->widthTotalBytes(); } bool isCompound() const override { return true; } @@ -1360,12 +1270,6 @@ public: void virtRefDTypep(AstNodeDType* nodep) override {} bool similarDType(const AstNodeDType* samep) const override { return this == samep; } AstBasicDType* basicp() const override VL_MT_STABLE { return nullptr; } - // cppcheck-suppress csyleCast - AstNodeDType* skipRefp() const override VL_MT_STABLE { return (AstNodeDType*)this; } - // cppcheck-suppress csyleCast - AstNodeDType* skipRefToConstp() const override { return (AstNodeDType*)this; } - // cppcheck-suppress csyleCast - AstNodeDType* skipRefToEnump() const override { return (AstNodeDType*)this; } int widthAlignBytes() const override { return 1; } int widthTotalBytes() const override { return 1; } bool isCompound() const override { return false; } @@ -1399,9 +1303,6 @@ public: void virtRefDTypep(AstNodeDType* nodep) override { refDTypep(nodep); } // METHODS AstBasicDType* basicp() const override VL_MT_STABLE { return subDTypep()->basicp(); } - AstNodeDType* skipRefp() const override VL_MT_STABLE { return (AstNodeDType*)this; } - AstNodeDType* skipRefToConstp() const override { return (AstNodeDType*)this; } - AstNodeDType* skipRefToEnump() const override { return (AstNodeDType*)this; } int widthAlignBytes() const override { return sizeof(std::map); } int widthTotalBytes() const override { return sizeof(std::map); } bool isCompound() const override { return true; } diff --git a/src/V3AstNodes.cpp b/src/V3AstNodes.cpp index 6d3872f5c..4ada5e738 100644 --- a/src/V3AstNodes.cpp +++ b/src/V3AstNodes.cpp @@ -783,6 +783,25 @@ AstVar* AstVar::scVarRecurse(AstNode* nodep) { return nullptr; } +const AstNodeDType* AstNodeDType::skipRefIterp(bool skipConst, bool skipEnum) const VL_MT_STABLE { + const AstNodeDType* nodep = this; + while (true) { + if (VL_UNLIKELY(VN_IS(nodep, MemberDType) || VN_IS(nodep, ParamTypeDType) + || VN_IS(nodep, RefDType) // + || (VN_IS(nodep, ConstDType) && skipConst) // + || (VN_IS(nodep, EnumDType) && skipEnum))) { + if (const AstNodeDType* subp = nodep->subDTypep()) { + nodep = subp; + continue; + } else { + v3fatalSrc("Typedef not linked"); + return nullptr; + } + } + return nodep; + } +} + bool AstNodeDType::isFourstate() const { return basicp() && basicp()->isFourstate(); } class AstNodeDType::CTypeRecursed final { @@ -1896,7 +1915,7 @@ void AstMemberDType::dumpSmall(std::ostream& str) const { this->AstNodeDType::dumpSmall(str); str << "member"; } -AstNodeUOrStructDType* AstMemberDType::getChildStructp() const { +AstNodeUOrStructDType* AstMemberDType::getChildStructp() { AstNodeDType* subdtp = skipRefp(); while (AstNodeArrayDType* const asubdtp = VN_CAST(subdtp, NodeArrayDType)) { subdtp = asubdtp->subDTypep(); diff --git a/src/V3Class.cpp b/src/V3Class.cpp index 9e82be6ea..be16c81cd 100644 --- a/src/V3Class.cpp +++ b/src/V3Class.cpp @@ -208,7 +208,7 @@ class ClassVisitor final : public VNVisitor { m_names.get(dtypep->name() + (VN_IS(dtypep, UnionDType) ? "__union" : "__struct"))); if (dtypep->packed()) m_strDtypeps.insert(dtypep); - for (const AstMemberDType* itemp = dtypep->membersp(); itemp; + for (AstMemberDType* itemp = dtypep->membersp(); itemp; itemp = VN_AS(itemp->nextp(), MemberDType)) { AstNodeUOrStructDType* const subp = itemp->getChildStructp(); // Recurse only into anonymous structs inside this definition, @@ -271,7 +271,7 @@ public: AstNodeUOrStructDType* const dtypep = m_pubStrDtypeps.front(); m_pubStrDtypeps.pop(); if (pubStrDtypeps.insert(dtypep).second) { - for (const AstMemberDType* itemp = dtypep->membersp(); itemp; + for (AstMemberDType* itemp = dtypep->membersp(); itemp; itemp = VN_AS(itemp->nextp(), MemberDType)) { if (AstNodeUOrStructDType* const subp = itemp->getChildStructp()) m_pubStrDtypeps.push(subp); diff --git a/src/V3EmitCHeaders.cpp b/src/V3EmitCHeaders.cpp index 839dc00ca..97268d140 100644 --- a/src/V3EmitCHeaders.cpp +++ b/src/V3EmitCHeaders.cpp @@ -223,7 +223,7 @@ class EmitCHeader final : public EmitCConstInit { std::set& emitted) { if (emitted.count(sdtypep) > 0) return; emitted.insert(sdtypep); - for (const AstMemberDType* itemp = sdtypep->membersp(); itemp; + for (AstMemberDType* itemp = sdtypep->membersp(); itemp; itemp = VN_AS(itemp->nextp(), MemberDType)) { AstNodeUOrStructDType* const subp = itemp->getChildStructp(); if (subp && (!subp->packed() || sdtypep->packed())) { diff --git a/src/V3HierBlock.cpp b/src/V3HierBlock.cpp index fb79927fe..853bc41eb 100644 --- a/src/V3HierBlock.cpp +++ b/src/V3HierBlock.cpp @@ -271,7 +271,7 @@ void V3HierBlock::writeParametersFile() const { const string moduleName = "Vhsh" + hash.digestSymbol(); const std::unique_ptr of{V3File::new_ofstream(typeParametersFilename())}; *of << "module " << moduleName << ";\n"; - for (const AstParamTypeDType* const gparam : m_params.gTypeParams()) { + for (AstParamTypeDType* const gparam : m_params.gTypeParams()) { AstTypedef* tdefp = new AstTypedef(new FileLine{FileLine::builtInFilename()}, gparam->name(), nullptr, VFlagChildDType{}, gparam->skipRefp()->cloneTreePure(true)); diff --git a/src/V3Param.cpp b/src/V3Param.cpp index d427c4f58..f52246941 100644 --- a/src/V3Param.cpp +++ b/src/V3Param.cpp @@ -373,9 +373,7 @@ class ParamProcessor final { // TODO: This parameter value number lookup via a constructed key string is not // particularly robust for type parameters. We should really have a type // equivalence predicate function. - if (const AstRefDType* const refp = VN_CAST(nodep, RefDType)) { - nodep = refp->skipRefToEnump(); - } + if (AstRefDType* const refp = VN_CAST(nodep, RefDType)) { nodep = refp->skipRefToEnump(); } const string paramStr = paramValueString(nodep); // cppcheck-has-bug-suppress unreadVariable V3Hash hash = V3Hasher::uncachedHash(nodep) + paramStr; @@ -532,7 +530,7 @@ class ParamProcessor final { // nullptr means that the parameter is using some default value. params.emplace(varp->name(), constp); } - } else if (const AstParamTypeDType* const p = VN_CAST(stmtp, ParamTypeDType)) { + } else if (AstParamTypeDType* const p = VN_CAST(stmtp, ParamTypeDType)) { params.emplace(p->name(), p->skipRefp()); } } diff --git a/src/V3Width.cpp b/src/V3Width.cpp index 00a0d157c..f4a7c714a 100644 --- a/src/V3Width.cpp +++ b/src/V3Width.cpp @@ -6868,7 +6868,7 @@ class WidthVisitor final : public VNVisitor { return false; } void checkClassAssign(AstNode* nodep, const char* side, AstNode* rhsp, - const AstNodeDType* const lhsDTypep) { + AstNodeDType* const lhsDTypep) { if (AstClassRefDType* const lhsClassRefp = VN_CAST(lhsDTypep->skipRefp(), ClassRefDType)) { UASSERT_OBJ(rhsp->dtypep(), rhsp, "Node has no type"); AstNodeDType* const rhsDtypep = rhsp->dtypep()->skipRefp();