]> granicus.if.org Git - clang/commitdiff
Added conditional guard 'if (CurLexer)' when using SetCommentRetentionState().
authorTed Kremenek <kremenek@apple.com>
Tue, 18 Nov 2008 00:43:07 +0000 (00:43 +0000)
committerTed Kremenek <kremenek@apple.com>
Tue, 18 Nov 2008 00:43:07 +0000 (00:43 +0000)
This is because the PTHLexer will not support this method. Performance testing
on preprocessing Cocoa.h shows that this results in a negligible performance
difference (less than 1%).

I tried making Lexer::SetCommentRetentionState() an out-of-line function (a
precursor to making it a virtual function in PreprocessorLexer) and noticed a 1%
decrease in speed (it is called in a hot part of the Preprocessor).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59477 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Lex/PPDirectives.cpp

index 1a19a1a26c6e294558e01049afd54fac233d103c..22178739867d883a67c697ddc82ab3bb1f4b7051 100644 (file)
@@ -150,7 +150,7 @@ void Preprocessor::SkipExcludedConditionalBlock(SourceLocation IfTokenLoc,
     // directive mode.  Tell the lexer this so any newlines we see will be
     // converted into an EOM token (this terminates the macro).
     CurPPLexer->ParsingPreprocessorDirective = true;
-    CurLexer->SetCommentRetentionState(false);
+    if (CurLexer) CurLexer->SetCommentRetentionState(false);
 
     
     // Read the next token, the directive flavor.
@@ -161,7 +161,7 @@ void Preprocessor::SkipExcludedConditionalBlock(SourceLocation IfTokenLoc,
     if (Tok.isNot(tok::identifier)) {
       CurPPLexer->ParsingPreprocessorDirective = false;
       // Restore comment saving mode.
-      CurLexer->SetCommentRetentionState(KeepComments);
+      if (CurLexer) CurLexer->SetCommentRetentionState(KeepComments);
       continue;
     }
 
@@ -176,7 +176,7 @@ void Preprocessor::SkipExcludedConditionalBlock(SourceLocation IfTokenLoc,
         FirstChar != 'i' && FirstChar != 'e') {
       CurPPLexer->ParsingPreprocessorDirective = false;
       // Restore comment saving mode.
-      CurLexer->SetCommentRetentionState(KeepComments);
+      if (CurLexer) CurLexer->SetCommentRetentionState(KeepComments);
       continue;
     }
     
@@ -197,7 +197,7 @@ void Preprocessor::SkipExcludedConditionalBlock(SourceLocation IfTokenLoc,
       if (IdLen >= 20) {
         CurPPLexer->ParsingPreprocessorDirective = false;
         // Restore comment saving mode.
-        CurLexer->SetCommentRetentionState(KeepComments);
+        if (CurLexer) CurLexer->SetCommentRetentionState(KeepComments);
         continue;
       }
       memcpy(Directive, &DirectiveStr[0], IdLen);
@@ -278,7 +278,7 @@ void Preprocessor::SkipExcludedConditionalBlock(SourceLocation IfTokenLoc,
     
     CurPPLexer->ParsingPreprocessorDirective = false;
     // Restore comment saving mode.
-    CurLexer->SetCommentRetentionState(KeepComments);
+    if (CurLexer) CurLexer->SetCommentRetentionState(KeepComments);
   }
 
   // Finally, if we are out of the conditional (saw an #endif or ran off the end
@@ -828,7 +828,7 @@ void Preprocessor::HandleDefineDirective(Token &DefineTok) {
 
   // If we are supposed to keep comments in #defines, reenable comment saving
   // mode.
-  CurLexer->SetCommentRetentionState(KeepMacroComments);
+  if (CurLexer) CurLexer->SetCommentRetentionState(KeepMacroComments);
   
   // Create the new macro.
   MacroInfo *MI = new MacroInfo(MacroNameTok.getLocation());