diff options
Diffstat (limited to 'utils')
-rw-r--r-- | utils/TableGen/Record.cpp | 12 | ||||
-rw-r--r-- | utils/TableGen/Record.h | 14 |
2 files changed, 26 insertions, 0 deletions
diff --git a/utils/TableGen/Record.cpp b/utils/TableGen/Record.cpp index 16b902b562..077476d07b 100644 --- a/utils/TableGen/Record.cpp +++ b/utils/TableGen/Record.cpp @@ -589,6 +589,18 @@ void RecordVal::print(std::ostream &OS, bool PrintSem) const { if (PrintSem) OS << ";\n"; } +void Record::setName(const std::string &Name) { + if (Records.getDef(getName()) == this) { + Records.removeDef(getName()); + this->Name = Name; + Records.addDef(this); + } else { + Records.removeClass(getName()); + this->Name = Name; + Records.addClass(this); + } +} + /// resolveReferencesTo - If anything in this record refers to RV, replace the /// reference to RV with the RHS of RV. If RV is null, we resolve all possible /// references. diff --git a/utils/TableGen/Record.h b/utils/TableGen/Record.h index b318157e0b..ce69d6778a 100644 --- a/utils/TableGen/Record.h +++ b/utils/TableGen/Record.h @@ -898,6 +898,7 @@ public: ~Record() {} const std::string &getName() const { return Name; } + void setName(const std::string &Name); // Also updates RecordKeeper. const std::vector<std::string> &getTemplateArgs() const { return TemplateArgs; } @@ -1058,6 +1059,19 @@ public: Defs.insert(std::make_pair(R->getName(), R)); } + /// removeClass - Remove, but do not delete, the specified record. + /// + void removeClass(const std::string &Name) { + assert(Classes.count(Name) && "Class does not exist!"); + Classes.erase(Name); + } + /// removeDef - Remove, but do not delete, the specified record. + /// + void removeDef(const std::string &Name) { + assert(Defs.count(Name) && "Def does not exist!"); + Defs.erase(Name); + } + //===--------------------------------------------------------------------===// // High-level helper methods, useful for tablegen backends... |