Make RecordKeeper::addClass/addDef take unique_ptrs instead of creating one internally.
authorCraig Topper <craig.topper@gmail.com>
Sat, 29 Nov 2014 05:52:51 +0000 (05:52 +0000)
committerCraig Topper <craig.topper@gmail.com>
Sat, 29 Nov 2014 05:52:51 +0000 (05:52 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222948 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/TableGen/Record.h
lib/TableGen/TGParser.cpp

index 8c5452e511ca3040f92f9424d7f93a0f3bb257fd..a06f3c9f72c49242ed6f4628d3e2c66a00c73c2d 100644 (file)
@@ -1688,15 +1688,13 @@ public:
     auto I = Defs.find(Name);
     return I == Defs.end() ? nullptr : I->second.get();
   }
-  void addClass(Record *_R) {
-    std::unique_ptr<Record> R(_R);
+  void addClass(std::unique_ptr<Record> R) {
     bool Ins = Classes.insert(std::make_pair(R->getName(),
                                              std::move(R))).second;
     (void)Ins;
     assert(Ins && "Class already exists");
   }
-  void addDef(Record *_R) {
-    std::unique_ptr<Record> R(_R);
+  void addDef(std::unique_ptr<Record> R) {
     bool Ins = Defs.insert(std::make_pair(R->getName(),
                                           std::move(R))).second;
     (void)Ins;
index c594da8b35002edbc5fc8578a17fb8e6f35d2494..8f83714d32e7472ec08eb7ffd4116f1b2aa6057f 100644 (file)
@@ -371,7 +371,7 @@ bool TGParser::ProcessForeachDefs(Record *CurRec, SMLoc Loc, IterSet &IterVals){
   }
 
   Record *IterRecSave = IterRec.get(); // Keep a copy before release.
-  Records.addDef(IterRec.release());
+  Records.addDef(std::move(IterRec));
   IterRecSave->resolveReferences();
   return false;
 }
@@ -1252,7 +1252,7 @@ Init *TGParser::ParseSimpleValue(Record *CurRec, RecTy *ItemType,
 
     if (!CurMultiClass) {
       NewRec->resolveReferences();
-      Records.addDef(NewRecOwner.release());
+      Records.addDef(std::move(NewRecOwner));
     } else {
       // This needs to get resolved once the multiclass template arguments are
       // known before any use.
@@ -2044,7 +2044,7 @@ bool TGParser::ParseDef(MultiClass *CurMultiClass) {
     if (Records.getDef(CurRec->getNameInitAsString()))
       return Error(DefLoc, "def '" + CurRec->getNameInitAsString()+
                    "' already defined");
-    Records.addDef(CurRecOwner.release());
+    Records.addDef(std::move(CurRecOwner));
 
     if (ParseObjectBody(CurRec))
       return true;
@@ -2169,8 +2169,10 @@ bool TGParser::ParseClass() {
                       + "' already defined");
   } else {
     // If this is the first reference to this class, create and add it.
-    CurRec = new Record(Lex.getCurStrVal(), Lex.getLoc(), Records);
-    Records.addClass(CurRec);
+    auto NewRec = make_unique<Record>(Lex.getCurStrVal(), Lex.getLoc(),
+                                      Records);
+    CurRec = NewRec.get();
+    Records.addClass(std::move(NewRec));
   }
   Lex.Lex(); // eat the name.
 
@@ -2442,7 +2444,7 @@ InstantiateMulticlassDef(MultiClass &MC,
     }
 
     Record *CurRecSave = CurRec.get(); // Keep a copy before we release.
-    Records.addDef(CurRec.release());
+    Records.addDef(std::move(CurRec));
     return CurRecSave;
   }