From: Chris Lattner Date: Wed, 11 Mar 2009 17:08:13 +0000 (+0000) Subject: implement support for C-style string literal concatenation in td files. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=d7a50cf28c48d44cee0aa4c5abe2dce359a10727;p=oota-llvm.git implement support for C-style string literal concatenation in td files. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66663 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/TableGen/strconcat.td b/test/TableGen/strconcat.td index cdf3928f04d..fc0d80596c9 100644 --- a/test/TableGen/strconcat.td +++ b/test/TableGen/strconcat.td @@ -2,6 +2,9 @@ class Y { string T = !strconcat(S, "foo"); + + // String values concatenate lexically, as in C. + string S = "foo" "bar"; } def Z : Y<"fu">; diff --git a/utils/TableGen/TGParser.cpp b/utils/TableGen/TGParser.cpp index 1ea6b9816f6..d31e2a50ee2 100644 --- a/utils/TableGen/TGParser.cpp +++ b/utils/TableGen/TGParser.cpp @@ -505,7 +505,7 @@ Init *TGParser::ParseIDValue(Record *CurRec, /// /// SimpleValue ::= IDValue /// SimpleValue ::= INTVAL -/// SimpleValue ::= STRVAL +/// SimpleValue ::= STRVAL+ /// SimpleValue ::= CODEFRAGMENT /// SimpleValue ::= '?' /// SimpleValue ::= '{' ValueList '}' @@ -523,7 +523,19 @@ Init *TGParser::ParseSimpleValue(Record *CurRec) { switch (Lex.getCode()) { default: TokError("Unknown token when parsing a value"); break; case tgtok::IntVal: R = new IntInit(Lex.getCurIntVal()); Lex.Lex(); break; - case tgtok::StrVal: R = new StringInit(Lex.getCurStrVal()); Lex.Lex(); break; + case tgtok::StrVal: { + std::string Val = Lex.getCurStrVal(); + Lex.Lex(); + + // Handle multiple consequtive concatenated strings. + while (Lex.getCode() == tgtok::StrVal) { + Val += Lex.getCurStrVal(); + Lex.Lex(); + } + + R = new StringInit(Val); + break; + } case tgtok::CodeFragment: R = new CodeInit(Lex.getCurStrVal()); Lex.Lex(); break; case tgtok::question: R = new UnsetInit(); Lex.Lex(); break;