Allow initializing variable initializers with variables
authorChris Lattner <sabre@nondot.org>
Mon, 28 Jul 2003 03:39:57 +0000 (03:39 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 28 Jul 2003 03:39:57 +0000 (03:39 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7354 91177308-0d34-0410-b5e6-96231b3b80d8

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

index 469faa9b01bf4d290d1255d3b1869f7973900644..2aabef408ddda5503b8509e1b85af6fc8736de67 100644 (file)
@@ -127,6 +127,15 @@ Init *RecordRecTy::convertValue(DefInit *DI) {
   return DI;
 }
 
+Init *RecordRecTy::convertValue(TypedInit *VI) {
+  // Ensure that VI is compatible with Rec.
+  if (RecordRecTy *RRT = dynamic_cast<RecordRecTy*>(VI->getType()))
+    if (RRT->getRecord()->isSubClassOf(getRecord()) ||
+        RRT->getRecord() == getRecord())
+      return VI;
+  return 0;
+}
+
 //===----------------------------------------------------------------------===//
 //    Initializer implementations
 //===----------------------------------------------------------------------===//
index 73b5c741022642c5443c7685a3960af510e0b6a4..72123cb52057079cbb2791faf52948ce7c2fff2d 100644 (file)
@@ -136,7 +136,8 @@ public:
   Record *getRecord() const { return Rec; }
 
   Init *convertValue(UnsetInit *UI) { return (Init*)UI; }
-  Init *convertValue(   DefInit *DI);
+  Init *convertValue(  DefInit *DI);
+  Init *convertValue(TypedInit *VI); 
 
   void print(std::ostream &OS) const;
 };
index 469faa9b01bf4d290d1255d3b1869f7973900644..2aabef408ddda5503b8509e1b85af6fc8736de67 100644 (file)
@@ -127,6 +127,15 @@ Init *RecordRecTy::convertValue(DefInit *DI) {
   return DI;
 }
 
+Init *RecordRecTy::convertValue(TypedInit *VI) {
+  // Ensure that VI is compatible with Rec.
+  if (RecordRecTy *RRT = dynamic_cast<RecordRecTy*>(VI->getType()))
+    if (RRT->getRecord()->isSubClassOf(getRecord()) ||
+        RRT->getRecord() == getRecord())
+      return VI;
+  return 0;
+}
+
 //===----------------------------------------------------------------------===//
 //    Initializer implementations
 //===----------------------------------------------------------------------===//
index 73b5c741022642c5443c7685a3960af510e0b6a4..72123cb52057079cbb2791faf52948ce7c2fff2d 100644 (file)
@@ -136,7 +136,8 @@ public:
   Record *getRecord() const { return Rec; }
 
   Init *convertValue(UnsetInit *UI) { return (Init*)UI; }
-  Init *convertValue(   DefInit *DI);
+  Init *convertValue(  DefInit *DI);
+  Init *convertValue(TypedInit *VI); 
 
   void print(std::ostream &OS) const;
 };