Add and use a new method
authorChris Lattner <sabre@nondot.org>
Thu, 7 Aug 2003 19:41:59 +0000 (19:41 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 7 Aug 2003 19:41:59 +0000 (19:41 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7682 91177308-0d34-0410-b5e6-96231b3b80d8

support/tools/TableGen/Record.h
support/tools/TableGen/RegisterInfoEmitter.cpp
utils/TableGen/Record.h
utils/TableGen/RegisterInfoEmitter.cpp

index b6214516435786a258abfd28e6f5bdbe89f101b6..5c50a07651dd29faaeae643da184b468c6592959 100644 (file)
@@ -703,6 +703,13 @@ public:
     return false;
   }
 
+  bool isSubClassOf(const std::string &Name) const {
+    for (unsigned i = 0, e = SuperClasses.size(); i != e; ++i)
+      if (SuperClasses[i]->getName() == Name)
+        return true;
+    return false;
+  }
+
   void addSuperClass(Record *R) {
     assert(!isSubClassOf(R) && "Already subclassing record!");
     SuperClasses.push_back(R);
index f1f8a86bd4f0a907258e8fbfb1608983a9503e09..9ef5f020a28890428fc92372d4df6ef9a1b843d1 100644 (file)
@@ -73,7 +73,6 @@ void RegisterInfoEmitter::run(std::ostream &OS) {
     Records.getAllDerivedDefinitions("RegisterClass");
 
   std::vector<Record*> Registers = Records.getAllDerivedDefinitions("Register");
-  Record *RegisterClass = Records.getClass("Register");
 
   std::set<Record*> RegistersFound;
   std::vector<std::string> RegClassNames;
@@ -99,7 +98,7 @@ void RegisterInfoEmitter::run(std::ostream &OS) {
       DefInit *RegDef = dynamic_cast<DefInit*>(RegList->getElement(i));
       if (!RegDef) throw "Register class member is not a record!";      
       Record *Reg = RegDef->getDef();
-      if (!Reg->isSubClassOf(RegisterClass))
+      if (!Reg->isSubClassOf("Register"))
         throw "Register Class member '" + Reg->getName() +
               " does not derive from the Register class!";
       if (RegistersFound.count(Reg))
index b6214516435786a258abfd28e6f5bdbe89f101b6..5c50a07651dd29faaeae643da184b468c6592959 100644 (file)
@@ -703,6 +703,13 @@ public:
     return false;
   }
 
+  bool isSubClassOf(const std::string &Name) const {
+    for (unsigned i = 0, e = SuperClasses.size(); i != e; ++i)
+      if (SuperClasses[i]->getName() == Name)
+        return true;
+    return false;
+  }
+
   void addSuperClass(Record *R) {
     assert(!isSubClassOf(R) && "Already subclassing record!");
     SuperClasses.push_back(R);
index f1f8a86bd4f0a907258e8fbfb1608983a9503e09..9ef5f020a28890428fc92372d4df6ef9a1b843d1 100644 (file)
@@ -73,7 +73,6 @@ void RegisterInfoEmitter::run(std::ostream &OS) {
     Records.getAllDerivedDefinitions("RegisterClass");
 
   std::vector<Record*> Registers = Records.getAllDerivedDefinitions("Register");
-  Record *RegisterClass = Records.getClass("Register");
 
   std::set<Record*> RegistersFound;
   std::vector<std::string> RegClassNames;
@@ -99,7 +98,7 @@ void RegisterInfoEmitter::run(std::ostream &OS) {
       DefInit *RegDef = dynamic_cast<DefInit*>(RegList->getElement(i));
       if (!RegDef) throw "Register class member is not a record!";      
       Record *Reg = RegDef->getDef();
-      if (!Reg->isSubClassOf(RegisterClass))
+      if (!Reg->isSubClassOf("Register"))
         throw "Register Class member '" + Reg->getName() +
               " does not derive from the Register class!";
       if (RegistersFound.count(Reg))