diff options
| author | Chad Rosier <mcrosier@apple.com> | 2012-08-16 22:40:32 +0000 |
|---|---|---|
| committer | Chad Rosier <mcrosier@apple.com> | 2012-08-16 22:40:32 +0000 |
| commit | bf17e01fe5ba247bd1e60af676265a01f93d594a (patch) | |
| tree | 5249fc122008bc88ddf7393ce81dc347c6464816 /clang/lib | |
| parent | 78f565b0a0f2578c1f79ad850506669f8f54ec49 (diff) | |
| download | bcm5719-llvm-bf17e01fe5ba247bd1e60af676265a01f93d594a.tar.gz bcm5719-llvm-bf17e01fe5ba247bd1e60af676265a01f93d594a.zip | |
[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.
llvm-svn: 162053
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Sema/SemaStmt.cpp | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp index 4954a4c4287..c093a9a098f 100644 --- a/clang/lib/Sema/SemaStmt.cpp +++ b/clang/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(); } |

