[llvm-commits] [llvm] r48450 - /llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp

Nate Begeman natebegeman at mac.com
Mon Mar 17 00:26:14 PDT 2008


Author: sampo
Date: Mon Mar 17 02:26:14 2008
New Revision: 48450

URL: http://llvm.org/viewvc/llvm-project?rev=48450&view=rev
Log:
Add support for escaping {} in asm strings, based on patch from Nick Burns.

Modified:
    llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp

Modified: llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp?rev=48450&r1=48449&r2=48450&view=diff

==============================================================================
--- llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp (original)
+++ llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp Mon Mar 17 02:26:14 2008
@@ -122,7 +122,7 @@
   std::string::size_type LastEmitted = 0;
   while (LastEmitted != AsmString.size()) {
     std::string::size_type DollarPos =
-      AsmString.find_first_of("${|}", LastEmitted);
+      AsmString.find_first_of("${|}\\", LastEmitted);
     if (DollarPos == std::string::npos) DollarPos = AsmString.size();
 
     // Emit a constant string fragment.
@@ -132,6 +132,23 @@
         AddLiteralString(std::string(AsmString.begin()+LastEmitted,
                                      AsmString.begin()+DollarPos));
       LastEmitted = DollarPos;
+    } else if (AsmString[DollarPos] == '\\') {
+      if (DollarPos+1 != AsmString.size() &&
+          (CurVariant == Variant || CurVariant == ~0U)) {
+        if (AsmString[DollarPos+1] == 'n') {
+          AddLiteralString("\\n");
+        } else if (AsmString[DollarPos+1] == 't') {
+          AddLiteralString("\\t");
+        } else if (std::string("${|}\\").find(AsmString[DollarPos+1]) 
+                   != std::string::npos) {
+          AddLiteralString(std::string(1, AsmString[DollarPos+1]));
+        } else {
+          throw "Non-supported escaped character found in instruction '" +
+            CGI.TheDef->getName() + "'!";
+        }
+        LastEmitted = DollarPos+2;
+        continue;
+      }
     } else if (AsmString[DollarPos] == '{') {
       if (CurVariant != ~0U)
         throw "Nested variants found for instruction '" +





More information about the llvm-commits mailing list