[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