aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChad Rosier <mcrosier@apple.com>2012-08-16 22:40:32 +0000
committerChad Rosier <mcrosier@apple.com>2012-08-16 22:40:32 +0000
commit7e1fb9abfc8d67fe4e7203ef6830a893df704d7b (patch)
tree8229e3e0c21b0fcf77d8423c1f146bb371c666b4
parent7f90b531818ad772f6e407f88101dc618c738fa4 (diff)
[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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162053 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Sema/SemaStmt.cpp30
1 files changed, 16 insertions, 14 deletions
diff --git a/lib/Sema/SemaStmt.cpp b/lib/Sema/SemaStmt.cpp
index 4954a4c428..c093a9a098 100644
--- a/lib/Sema/SemaStmt.cpp
+++ b/lib/Sema/SemaStmt.cpp
@@ -2773,6 +2773,16 @@ static bool isMSAsmKeyword(StringRef Name) {
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 @@ static void patchMSAsmStrings(Sema &SemaRef, bool &IsSimple,
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 @@ static void patchMSAsmStrings(Sema &SemaRef, bool &IsSimple,
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 @@ static std::string buildMSAsmString(Sema &SemaRef,
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 @@ static std::string buildMSAsmString(Sema &SemaRef,
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();
}