forked from OSchip/llvm-project
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). llvm-svn: 59477
This commit is contained in:
parent
f1e9329209
commit
59e003e538
|
@ -150,7 +150,7 @@ void Preprocessor::SkipExcludedConditionalBlock(SourceLocation IfTokenLoc,
|
||||||
// directive mode. Tell the lexer this so any newlines we see will be
|
// directive mode. Tell the lexer this so any newlines we see will be
|
||||||
// converted into an EOM token (this terminates the macro).
|
// converted into an EOM token (this terminates the macro).
|
||||||
CurPPLexer->ParsingPreprocessorDirective = true;
|
CurPPLexer->ParsingPreprocessorDirective = true;
|
||||||
CurLexer->SetCommentRetentionState(false);
|
if (CurLexer) CurLexer->SetCommentRetentionState(false);
|
||||||
|
|
||||||
|
|
||||||
// Read the next token, the directive flavor.
|
// Read the next token, the directive flavor.
|
||||||
|
@ -161,7 +161,7 @@ void Preprocessor::SkipExcludedConditionalBlock(SourceLocation IfTokenLoc,
|
||||||
if (Tok.isNot(tok::identifier)) {
|
if (Tok.isNot(tok::identifier)) {
|
||||||
CurPPLexer->ParsingPreprocessorDirective = false;
|
CurPPLexer->ParsingPreprocessorDirective = false;
|
||||||
// Restore comment saving mode.
|
// Restore comment saving mode.
|
||||||
CurLexer->SetCommentRetentionState(KeepComments);
|
if (CurLexer) CurLexer->SetCommentRetentionState(KeepComments);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,7 +176,7 @@ void Preprocessor::SkipExcludedConditionalBlock(SourceLocation IfTokenLoc,
|
||||||
FirstChar != 'i' && FirstChar != 'e') {
|
FirstChar != 'i' && FirstChar != 'e') {
|
||||||
CurPPLexer->ParsingPreprocessorDirective = false;
|
CurPPLexer->ParsingPreprocessorDirective = false;
|
||||||
// Restore comment saving mode.
|
// Restore comment saving mode.
|
||||||
CurLexer->SetCommentRetentionState(KeepComments);
|
if (CurLexer) CurLexer->SetCommentRetentionState(KeepComments);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -197,7 +197,7 @@ void Preprocessor::SkipExcludedConditionalBlock(SourceLocation IfTokenLoc,
|
||||||
if (IdLen >= 20) {
|
if (IdLen >= 20) {
|
||||||
CurPPLexer->ParsingPreprocessorDirective = false;
|
CurPPLexer->ParsingPreprocessorDirective = false;
|
||||||
// Restore comment saving mode.
|
// Restore comment saving mode.
|
||||||
CurLexer->SetCommentRetentionState(KeepComments);
|
if (CurLexer) CurLexer->SetCommentRetentionState(KeepComments);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
memcpy(Directive, &DirectiveStr[0], IdLen);
|
memcpy(Directive, &DirectiveStr[0], IdLen);
|
||||||
|
@ -278,7 +278,7 @@ void Preprocessor::SkipExcludedConditionalBlock(SourceLocation IfTokenLoc,
|
||||||
|
|
||||||
CurPPLexer->ParsingPreprocessorDirective = false;
|
CurPPLexer->ParsingPreprocessorDirective = false;
|
||||||
// Restore comment saving mode.
|
// 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
|
// 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
|
// If we are supposed to keep comments in #defines, reenable comment saving
|
||||||
// mode.
|
// mode.
|
||||||
CurLexer->SetCommentRetentionState(KeepMacroComments);
|
if (CurLexer) CurLexer->SetCommentRetentionState(KeepMacroComments);
|
||||||
|
|
||||||
// Create the new macro.
|
// Create the new macro.
|
||||||
MacroInfo *MI = new MacroInfo(MacroNameTok.getLocation());
|
MacroInfo *MI = new MacroInfo(MacroNameTok.getLocation());
|
||||||
|
|
Loading…
Reference in New Issue