[llvm-commits] [llvm] r66949 - in /llvm/trunk: test/TableGen/String.td utils/TableGen/TGLexer.cpp
Chris Lattner
sabre at nondot.org
Fri Mar 13 14:03:27 PDT 2009
Author: lattner
Date: Fri Mar 13 16:03:27 2009
New Revision: 66949
URL: http://llvm.org/viewvc/llvm-project?rev=66949&view=rev
Log:
add support for a few simple escape characters in tblgen strings.
Added:
llvm/trunk/test/TableGen/String.td
Modified:
llvm/trunk/utils/TableGen/TGLexer.cpp
Added: llvm/trunk/test/TableGen/String.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/TableGen/String.td?rev=66949&view=auto
==============================================================================
--- llvm/trunk/test/TableGen/String.td (added)
+++ llvm/trunk/test/TableGen/String.td Fri Mar 13 16:03:27 2009
@@ -0,0 +1,5 @@
+// RUN: tblgen %s
+class x {
+ string y = "missing terminating '\"' character";
+}
+
Modified: llvm/trunk/utils/TableGen/TGLexer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/TGLexer.cpp?rev=66949&r1=66948&r2=66949&view=diff
==============================================================================
--- llvm/trunk/utils/TableGen/TGLexer.cpp (original)
+++ llvm/trunk/utils/TableGen/TGLexer.cpp Fri Mar 13 16:03:27 2009
@@ -151,6 +151,8 @@
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 @@
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;
}
More information about the llvm-commits
mailing list