OSDN Git Service

Parse DAG patterns
authorChris Lattner <sabre@nondot.org>
Mon, 4 Aug 2003 20:44:43 +0000 (20:44 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 4 Aug 2003 20:44:43 +0000 (20:44 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7577 91177308-0d34-0410-b5e6-96231b3b80d8

support/tools/TableGen/FileParser.y
utils/TableGen/FileParser.y

index 95dfb42..0ab3e5b 100644 (file)
@@ -161,6 +161,7 @@ static void addSubClass(Record *SC, const std::vector<Init*> &TemplateArgs) {
   int                   IntVal;
   RecTy                *Ty;
   Init                 *Initializer;
+  std::vector<Init*>   *DagValueList;
   std::vector<Init*>   *FieldList;
   std::vector<unsigned>*BitList;
   Record               *Rec;
@@ -179,6 +180,7 @@ static void addSubClass(Record *SC, const std::vector<Init*> &TemplateArgs) {
 %type <SubClassList> ClassList ClassListNE
 %type <IntVal>       OptPrefix
 %type <Initializer>  Value OptValue
+%type <DagValueList> DagArgList DagArgListNE
 %type <FieldList>    ValueList ValueListNE
 %type <BitList>      BitList OptBitList RBitList
 %type <StrVal>       Declaration OptID
@@ -270,8 +272,30 @@ Value : INTVAL {
     }
     $$ = new FieldInit($1, *$3);
     delete $3;
+  } | '(' ID DagArgList ')' {
+    Record *D = Records.getDef(*$2);
+    if (D == 0) {
+      err() << "Invalid def '" << *$2 << "'!\n";
+      abort();
+    }
+    $$ = new DagInit(D, *$3);
+    delete $2; delete $3;
   };
 
+DagArgListNE : Value {
+    $$ = new std::vector<Init*>();
+    $$->push_back($1);
+  }
+  | DagArgListNE ',' Value {
+    $1->push_back($3);
+  };
+
+DagArgList : /*empty*/ {
+    $$ = new std::vector<Init*>();
+  }
+  | DagArgListNE { $$ = $1; };
+
+
 RBitList : INTVAL {
     $$ = new std::vector<unsigned>();
     $$->push_back($1);
index 95dfb42..0ab3e5b 100644 (file)
@@ -161,6 +161,7 @@ static void addSubClass(Record *SC, const std::vector<Init*> &TemplateArgs) {
   int                   IntVal;
   RecTy                *Ty;
   Init                 *Initializer;
+  std::vector<Init*>   *DagValueList;
   std::vector<Init*>   *FieldList;
   std::vector<unsigned>*BitList;
   Record               *Rec;
@@ -179,6 +180,7 @@ static void addSubClass(Record *SC, const std::vector<Init*> &TemplateArgs) {
 %type <SubClassList> ClassList ClassListNE
 %type <IntVal>       OptPrefix
 %type <Initializer>  Value OptValue
+%type <DagValueList> DagArgList DagArgListNE
 %type <FieldList>    ValueList ValueListNE
 %type <BitList>      BitList OptBitList RBitList
 %type <StrVal>       Declaration OptID
@@ -270,8 +272,30 @@ Value : INTVAL {
     }
     $$ = new FieldInit($1, *$3);
     delete $3;
+  } | '(' ID DagArgList ')' {
+    Record *D = Records.getDef(*$2);
+    if (D == 0) {
+      err() << "Invalid def '" << *$2 << "'!\n";
+      abort();
+    }
+    $$ = new DagInit(D, *$3);
+    delete $2; delete $3;
   };
 
+DagArgListNE : Value {
+    $$ = new std::vector<Init*>();
+    $$->push_back($1);
+  }
+  | DagArgListNE ',' Value {
+    $1->push_back($3);
+  };
+
+DagArgList : /*empty*/ {
+    $$ = new std::vector<Init*>();
+  }
+  | DagArgListNE { $$ = $1; };
+
+
 RBitList : INTVAL {
     $$ = new std::vector<unsigned>();
     $$->push_back($1);