From b3f79ed8e77f0fb13a3a62eed76b95df68a037f6 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Thu, 9 Oct 2025 23:28:10 +0000 Subject: [PATCH] Create RTLIL::OwningIdString and use it in a few places --- kernel/rtlil.cc | 2 +- kernel/rtlil.h | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/kernel/rtlil.cc b/kernel/rtlil.cc index 0bc5d66c9..d1cf7f23e 100644 --- a/kernel/rtlil.cc +++ b/kernel/rtlil.cc @@ -42,7 +42,7 @@ std::vector RTLIL::IdString::global_refcount_storage_; std::vector RTLIL::IdString::global_free_idx_list_; #endif -#define X(_id) const RTLIL::IdString RTLIL::IDInternal::_id(RTLIL::StaticId::_id); +#define X(_id) const RTLIL::OwningIdString RTLIL::IDInternal::_id(RTLIL::StaticId::_id); #include "kernel/constids.inc" #undef X diff --git a/kernel/rtlil.h b/kernel/rtlil.h index 91aa0237e..f161ef445 100644 --- a/kernel/rtlil.h +++ b/kernel/rtlil.h @@ -121,6 +121,7 @@ namespace RTLIL struct Binding; struct IdString; struct StaticIdString; + struct OwningIdString; typedef std::pair SigSig; @@ -459,6 +460,16 @@ public: } }; +struct RTLIL::OwningIdString : public RTLIL::IdString { + inline OwningIdString() { } + inline OwningIdString(const char *str) : IdString(str) { } + inline OwningIdString(const IdString &str) : IdString(str) { } + inline OwningIdString(IdString &&str) : IdString(str) { } + inline OwningIdString(const std::string &str) : IdString(str) { } + inline OwningIdString(std::string_view str) : IdString(str) { } + inline OwningIdString(StaticId id) : IdString(id) { } +}; + namespace hashlib { template <> struct hash_ops { @@ -493,7 +504,7 @@ inline bool RTLIL::IdString::operator!=(const RTLIL::StaticIdString &rhs) const namespace RTLIL { namespace IDInternal { -#define X(_id) extern const IdString _id; +#define X(_id) extern const OwningIdString _id; #include "kernel/constids.inc" #undef X }