[cfe-commits] r162053 - /cfe/trunk/lib/Sema/SemaStmt.cpp

Chad Rosier mcrosier at apple.com
Thu Aug 16 15:40:33 PDT 2012


Author: mcrosier
Date: Thu Aug 16 17:40:32 2012
New Revision: 162053

URL: http://llvm.org/viewvc/llvm-project?rev=162053&view=rev
Log:
[ms-inline asm] Extract a helper function, getSpelling().  Also use this on
tokens we don't know how to handle; this should aid when debugging.

Modified:
    cfe/trunk/lib/Sema/SemaStmt.cpp

Modified: cfe/trunk/lib/Sema/SemaStmt.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmt.cpp?rev=162053&r1=162052&r2=162053&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaStmt.cpp (original)
+++ cfe/trunk/lib/Sema/SemaStmt.cpp Thu Aug 16 17:40:32 2012
@@ -2773,6 +2773,16 @@
   return Ret;
 }
 
+static StringRef getSpelling(Sema &SemaRef, Token AsmTok) {
+  StringRef Asm;
+  SmallString<512> TokenBuf;
+  TokenBuf.resize(512);
+  bool StringInvalid = false;
+  Asm = SemaRef.PP.getSpelling(AsmTok, TokenBuf, &StringInvalid);
+  assert (!StringInvalid && "Expected valid string!");
+  return Asm;
+}
+
 static void patchMSAsmStrings(Sema &SemaRef, bool &IsSimple,
                               SourceLocation AsmLoc,
                               ArrayRef<Token> AsmToks,
@@ -2824,6 +2834,7 @@
     switch (AsmToks[i].getKind()) {
     default:
       IsSimple = false;
+      Asm += getSpelling(SemaRef, AsmToks[i]);
       break;
     case tok::comma: Asm += ","; break;
     case tok::colon: Asm += ":"; break;
@@ -2831,14 +2842,9 @@
     case tok::r_square: Asm += "]"; break;
     case tok::l_brace: Asm += "{"; break;
     case tok::r_brace: Asm += "}"; break;
-    case tok::numeric_constant: {
-      SmallString<32> TokenBuf;
-      TokenBuf.resize(32);
-      bool StringInvalid = false;
-      Asm += SemaRef.PP.getSpelling(AsmToks[i], TokenBuf, &StringInvalid);
-      assert (!StringInvalid && "Expected valid string!");
+    case tok::numeric_constant:
+      Asm += getSpelling(SemaRef, AsmToks[i]);
       break;
-    }
     case tok::identifier: {
       IdentifierInfo *II = AsmToks[i].getIdentifierInfo();
       StringRef Name = II->getName();
@@ -2907,11 +2913,9 @@
                                     ArrayRef<Token> AsmToks,
                                     unsigned &NumAsmStrings) {
   assert (!AsmToks.empty() && "Didn't expect an empty AsmToks!");
-  SmallString<512> Asm;
-  SmallString<512> TokenBuf;
-  TokenBuf.resize(512);
-
   NumAsmStrings = 0;
+
+  SmallString<512> Asm;
   for (unsigned i = 0, e = AsmToks.size(); i < e; ++i) {
     bool isNewAsm = i == 0 || AsmToks[i].isAtStartOfLine() ||
       AsmToks[i].is(tok::kw_asm);
@@ -2929,9 +2933,7 @@
     if (i && AsmToks[i].hasLeadingSpace() && !isNewAsm)
       Asm += ' ';
 
-    bool StringInvalid = false;
-    Asm += SemaRef.PP.getSpelling(AsmToks[i], TokenBuf, &StringInvalid);
-    assert (!StringInvalid && "Expected valid string!");
+    Asm += getSpelling(SemaRef, AsmToks[i]);
   }
   return Asm.c_str();
 }





More information about the cfe-commits mailing list