From bc21c34ea159dc40dfd5b001c189a725cd245f02 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 4 Aug 2003 20:44:43 +0000 Subject: Parse DAG patterns git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7577 91177308-0d34-0410-b5e6-96231b3b80d8 --- support/tools/TableGen/FileParser.y | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'support/tools/TableGen') diff --git a/support/tools/TableGen/FileParser.y b/support/tools/TableGen/FileParser.y index 95dfb42..0ab3e5b 100644 --- a/support/tools/TableGen/FileParser.y +++ b/support/tools/TableGen/FileParser.y @@ -161,6 +161,7 @@ static void addSubClass(Record *SC, const std::vector &TemplateArgs) { int IntVal; RecTy *Ty; Init *Initializer; + std::vector *DagValueList; std::vector *FieldList; std::vector*BitList; Record *Rec; @@ -179,6 +180,7 @@ static void addSubClass(Record *SC, const std::vector &TemplateArgs) { %type ClassList ClassListNE %type OptPrefix %type Value OptValue +%type DagArgList DagArgListNE %type ValueList ValueListNE %type BitList OptBitList RBitList %type 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(); + $$->push_back($1); + } + | DagArgListNE ',' Value { + $1->push_back($3); + }; + +DagArgList : /*empty*/ { + $$ = new std::vector(); + } + | DagArgListNE { $$ = $1; }; + + RBitList : INTVAL { $$ = new std::vector(); $$->push_back($1); -- cgit v1.1