mirror of
https://github.com/RPCS3/llvm.git
synced 2025-04-02 13:21:43 +00:00
add support for a few simple escape characters in tblgen strings.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66949 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
55a07b20cd
commit
ea9f4df616
5
test/TableGen/String.td
Normal file
5
test/TableGen/String.td
Normal file
@ -0,0 +1,5 @@
|
||||
// RUN: tblgen %s
|
||||
class x {
|
||||
string y = "missing terminating '\"' character";
|
||||
}
|
||||
|
@ -151,6 +151,8 @@ tgtok::TokKind TGLexer::LexToken() {
|
||||
tgtok::TokKind TGLexer::LexString() {
|
||||
const char *StrStart = CurPtr;
|
||||
|
||||
CurStrVal = "";
|
||||
|
||||
while (*CurPtr != '"') {
|
||||
// If we hit the end of the buffer, report an error.
|
||||
if (*CurPtr == 0 && CurPtr == CurBuf->getBufferEnd())
|
||||
@ -159,10 +161,32 @@ tgtok::TokKind TGLexer::LexString() {
|
||||
if (*CurPtr == '\n' || *CurPtr == '\r')
|
||||
return ReturnError(StrStart, "End of line in string literal");
|
||||
|
||||
if (*CurPtr != '\\') {
|
||||
CurStrVal += *CurPtr++;
|
||||
continue;
|
||||
}
|
||||
|
||||
++CurPtr;
|
||||
|
||||
switch (*CurPtr) {
|
||||
case '\\': case '\'': case '"':
|
||||
// These turn into their literal character.
|
||||
CurStrVal += *CurPtr++;
|
||||
break;
|
||||
case '\n':
|
||||
case '\r':
|
||||
return ReturnError(CurPtr, "escaped newlines not supported in tblgen");
|
||||
|
||||
// If we hit the end of the buffer, report an error.
|
||||
case '\0':
|
||||
if (CurPtr == CurBuf->getBufferEnd())
|
||||
return ReturnError(StrStart, "End of file in string literal");
|
||||
// FALL THROUGH
|
||||
default:
|
||||
return ReturnError(CurPtr, "invalid escape in string literal");
|
||||
}
|
||||
}
|
||||
|
||||
CurStrVal.assign(StrStart, CurPtr);
|
||||
++CurPtr;
|
||||
return tgtok::StrVal;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user