[cfe-commits] r59477 - /cfe/trunk/lib/Lex/PPDirectives.cpp
Ted Kremenek
kremenek at apple.com
Mon Nov 17 16:43:07 PST 2008
Author: kremenek
Date: Mon Nov 17 18:43:07 2008
New Revision: 59477
URL: http://llvm.org/viewvc/llvm-project?rev=59477&view=rev
Log:
Added conditional guard 'if (CurLexer)' when using SetCommentRetentionState().
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).
Modified:
cfe/trunk/lib/Lex/PPDirectives.cpp
Modified: cfe/trunk/lib/Lex/PPDirectives.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPDirectives.cpp?rev=59477&r1=59476&r2=59477&view=diff
==============================================================================
--- cfe/trunk/lib/Lex/PPDirectives.cpp (original)
+++ cfe/trunk/lib/Lex/PPDirectives.cpp Mon Nov 17 18:43:07 2008
@@ -150,7 +150,7 @@
// 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 @@
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 @@
FirstChar != 'i' && FirstChar != 'e') {
CurPPLexer->ParsingPreprocessorDirective = false;
// Restore comment saving mode.
- CurLexer->SetCommentRetentionState(KeepComments);
+ if (CurLexer) CurLexer->SetCommentRetentionState(KeepComments);
continue;
}
@@ -197,7 +197,7 @@
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 @@
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 @@
// 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());
More information about the cfe-commits
mailing list