diff options
| author | Chris Lattner <sabre@nondot.org> | 2003-08-10 22:14:13 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2003-08-10 22:14:13 +0000 |
| commit | 3859c9a8db3f6166f3286175b0dde08a634c7258 (patch) | |
| tree | 576dfb4cd61024a12fde5a1f8f6bda2baf03b5a4 /llvm/support/tools/TableGen/FileParser.y | |
| parent | 4eaf72fc3b8bc8fa44dbfbee48e2c049f3a0f52e (diff) | |
| download | bcm5719-llvm-3859c9a8db3f6166f3286175b0dde08a634c7258.tar.gz bcm5719-llvm-3859c9a8db3f6166f3286175b0dde08a634c7258.zip | |
Implement correct parsing, representation, and printing of DAG argument names
Implements testcase TableGen/TreeNames.td
llvm-svn: 7713
Diffstat (limited to 'llvm/support/tools/TableGen/FileParser.y')
| -rw-r--r-- | llvm/support/tools/TableGen/FileParser.y | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/llvm/support/tools/TableGen/FileParser.y b/llvm/support/tools/TableGen/FileParser.y index 5b983eb06c7..9650c53e2f2 100644 --- a/llvm/support/tools/TableGen/FileParser.y +++ b/llvm/support/tools/TableGen/FileParser.y @@ -161,12 +161,12 @@ 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; SubClassRefTy *SubClassRef; std::vector<SubClassRefTy> *SubClassList; + std::vector<std::pair<Init*, std::string> > *DagValueList; }; %token INT BIT STRING BITS LIST CODE DAG CLASS DEF FIELD LET IN @@ -183,7 +183,7 @@ static void addSubClass(Record *SC, const std::vector<Init*> &TemplateArgs) { %type <DagValueList> DagArgList DagArgListNE %type <FieldList> ValueList ValueListNE %type <BitList> BitList OptBitList RBitList -%type <StrVal> Declaration OptID +%type <StrVal> Declaration OptID OptVarName %start File %% @@ -282,16 +282,26 @@ Value : INTVAL { delete $2; delete $3; }; -DagArgListNE : Value { - $$ = new std::vector<Init*>(); - $$->push_back($1); +OptVarName : /* empty */ { + $$ = new std::string(); } - | DagArgListNE ',' Value { - $1->push_back($3); + | ':' VARNAME { + $$ = $2; + }; + +DagArgListNE : Value OptVarName { + $$ = new std::vector<std::pair<Init*, std::string> >(); + $$->push_back(std::make_pair($1, *$2)); + delete $2; + } + | DagArgListNE ',' Value OptVarName { + $1->push_back(std::make_pair($3, *$4)); + delete $4; + $$ = $1; }; DagArgList : /*empty*/ { - $$ = new std::vector<Init*>(); + $$ = new std::vector<std::pair<Init*, std::string> >(); } | DagArgListNE { $$ = $1; }; |

