Add support for let expressions around an mdef. This implements a new part
authorChris Lattner <sabre@nondot.org>
Wed, 11 Oct 2006 18:12:44 +0000 (18:12 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 11 Oct 2006 18:12:44 +0000 (18:12 +0000)
of Regression/TableGen/MultiClass.td.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30887 91177308-0d34-0410-b5e6-96231b3b80d8

utils/TableGen/FileParser.y

index c0e478d210a574f029e60a191880cee35515a8fe..8e564564bdef4e6a8240bd07b491bb774319afbb 100644 (file)
@@ -624,9 +624,9 @@ ObjectBody : ClassList {
              // Delete the template arg values for the class
              delete (*$1)[i].second;
            }
-           delete $1;   // Delete the class list...
+           delete $1;   // Delete the class list.
   
-           // Process any variables on the set stack...
+           // Process any variables on the let stack.
            for (unsigned i = 0, e = LetStack.size(); i != e; ++i)
              for (unsigned j = 0, e = LetStack[i].size(); j != e; ++j)
                setValue(LetStack[i][j].Name,
@@ -743,6 +743,14 @@ DefMInst : DEFM ID { CurDefmPrefix = $2; } ':' SubClassRef ';' {
       }
     }
     
+    // If the mdef is inside a 'let' expression, add to each def.
+    for (unsigned i = 0, e = LetStack.size(); i != e; ++i)
+      for (unsigned j = 0, e = LetStack[i].size(); j != e; ++j)
+        setValue(LetStack[i][j].Name,
+                 LetStack[i][j].HasBits ? &LetStack[i][j].Bits : 0,
+                 LetStack[i][j].Value);
+    
+    
     // Ensure redefinition doesn't happen.
     if (Records.getDef(CurRec->getName())) {
       err() << "def '" << CurRec->getName() << "' already defined, "