diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/Driver/PrintPreprocessedOutput.cpp | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/clang/Driver/PrintPreprocessedOutput.cpp b/clang/Driver/PrintPreprocessedOutput.cpp index deecacb1f4c..32b8a8b2792 100644 --- a/clang/Driver/PrintPreprocessedOutput.cpp +++ b/clang/Driver/PrintPreprocessedOutput.cpp @@ -430,10 +430,13 @@ bool PrintPPOutputPPCallbacks::AvoidConcat(const Token &PrevTok, // Avoid spelling identifiers, the most common form of token. FirstChar = II->getName()[0]; } else if (!Tok.needsCleaning()) { - // FIXME: SPEED UP LITERALS! - SourceManager &SrcMgr = PP.getSourceManager(); - FirstChar = - *SrcMgr.getCharacterData(SrcMgr.getSpellingLoc(Tok.getLocation())); + if (Tok.isLiteral() && Tok.getLiteralData()) { + FirstChar = *Tok.getLiteralData(); + } else { + SourceManager &SrcMgr = PP.getSourceManager(); + FirstChar = + *SrcMgr.getCharacterData(SrcMgr.getSpellingLoc(Tok.getLocation())); + } } else if (Tok.getLength() < 256) { const char *TokPtr = Buffer; PP.getSpelling(Tok, TokPtr); @@ -554,10 +557,10 @@ void clang::DoPrintPreprocessedInput(Preprocessor &PP, } if (IdentifierInfo *II = Tok.getIdentifierInfo()) { - const char *Str = II->getName(); - unsigned Len = Tok.needsCleaning() ? strlen(Str) : Tok.getLength(); - OS.write(Str, Len); - // FIXME: ACCELERATE LITERALS + OS.write(II->getName(), II->getLength()); + } else if (Tok.isLiteral() && !Tok.needsCleaning() && + Tok.getLiteralData()) { + OS.write(Tok.getLiteralData(), Tok.getLength()); } else if (Tok.getLength() < 256) { const char *TokPtr = Buffer; unsigned Len = PP.getSpelling(Tok, TokPtr); |