]> granicus.if.org Git - clang/commitdiff
minor speedups/cleanups for -E mode.
authorChris Lattner <sabre@nondot.org>
Mon, 26 Jan 2009 19:33:54 +0000 (19:33 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 26 Jan 2009 19:33:54 +0000 (19:33 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63029 91177308-0d34-0410-b5e6-96231b3b80d8

Driver/PrintPreprocessedOutput.cpp

index deecacb1f4c5e3f3cb27e222ea79b0eee0307b4b..32b8a8b2792c6f308aac688a944cf8ff1a15c23f 100644 (file)
@@ -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);