From: Chris Lattner Date: Wed, 18 Feb 2009 18:40:20 +0000 (+0000) Subject: only get the spelling of a token to get its length if X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0150cdfe9486686e899cf038f1c6a6083e7f8094;p=clang only get the spelling of a token to get its length if it needs cleaning. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@64932 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaChecking.cpp b/lib/Sema/SemaChecking.cpp index 6ffca1b7b8..818a892617 100644 --- a/lib/Sema/SemaChecking.cpp +++ b/lib/Sema/SemaChecking.cpp @@ -63,13 +63,20 @@ SourceLocation Sema::getLocationOfStringLiteralByte(const StringLiteral *SL, Token TheTok; TheLexer.LexFromRawLexer(TheTok); - // Get the spelling of the token to remove trigraphs and escaped newlines. - SpellingBuffer.resize(TheTok.getLength()); - const char *SpellingPtr = &SpellingBuffer[0]; - unsigned TokLen = PP.getSpelling(TheTok, SpellingPtr); + // We generally care about the length of the token, which is known by the + // lexer as long as we don't need to clean it (trigraphs/newlines). + unsigned TokNumBytes; + if (!TheTok.needsCleaning()) { + TokNumBytes = TheTok.getLength(); + } else { + // Get the spelling of the token to remove trigraphs and escaped newlines. + SpellingBuffer.resize(TheTok.getLength()); + const char *SpellingPtr = &SpellingBuffer[0]; + TokNumBytes = PP.getSpelling(TheTok, SpellingPtr); + } // The length of the string is the token length minus the two quotes. - unsigned TokNumBytes = TokLen-2; + TokNumBytes -= 2; // If we found the token we're looking for, return the location. // FIXME: This should consider character escapes!