From 45245217bcf82bccad31d4eb63e2dc827c5dca35 Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Wed, 19 Nov 2008 21:57:25 +0000 Subject: - Move static function IsNonPragmaNonMacroLexer into Preprocessor.h. - Add variants of IsNonPragmaNonMacroLexer to accept an IncludeMacroStack entry (simplifies some uses). - Use IsNonPragmaNonMacroLexer in Preprocessor::LookupFile. - Add 'FileID' to PreprocessorLexer, and have Preprocessor query this fileid when looking up the FileEntry for a file Performance testing of -Eonly on Cocoa.h shows no performance regression because of this patch. llvm-svn: 59666 --- clang/lib/Lex/PPLexerChange.cpp | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) (limited to 'clang/lib/Lex/PPLexerChange.cpp') diff --git a/clang/lib/Lex/PPLexerChange.cpp b/clang/lib/Lex/PPLexerChange.cpp index 87330983d65..3a2ed658fb3 100644 --- a/clang/lib/Lex/PPLexerChange.cpp +++ b/clang/lib/Lex/PPLexerChange.cpp @@ -25,27 +25,17 @@ PPCallbacks::~PPCallbacks() {} // Miscellaneous Methods. //===----------------------------------------------------------------------===// -static inline bool IsNonPragmaNonMacroLexer(const Lexer* L, - const PreprocessorLexer* P) { - if (L) - return !L->isPragmaLexer(); - else - return P != 0; -} - /// isInPrimaryFile - Return true if we're in the top-level file, not in a /// #include. This looks through macro expansions and active _Pragma lexers. bool Preprocessor::isInPrimaryFile() const { - if (IsNonPragmaNonMacroLexer(CurLexer.get(), CurPPLexer)) + if (IsNonPragmaNonMacroLexer()) return IncludeMacroStack.empty(); // If there are any stacked lexers, we're in a #include. - assert(IsNonPragmaNonMacroLexer(IncludeMacroStack[0].TheLexer, - IncludeMacroStack[0].ThePPLexer) && + assert(IsNonPragmaNonMacroLexer(IncludeMacroStack[0]) && "Top level include stack isn't our primary lexer?"); for (unsigned i = 1, e = IncludeMacroStack.size(); i != e; ++i) - if (IsNonPragmaNonMacroLexer(IncludeMacroStack[i].TheLexer, - IncludeMacroStack[i].ThePPLexer)) + if (IsNonPragmaNonMacroLexer(IncludeMacroStack[i])) return false; return true; } @@ -91,7 +81,7 @@ void Preprocessor::EnterSourceFileWithLexer(Lexer *TheLexer, const DirectoryLookup *CurDir) { // Add the current lexer to the include stack. - if (CurLexer || CurTokenLexer) + if (CurPPLexer || CurTokenLexer) PushIncludeMacroStack(); CurLexer.reset(TheLexer); @@ -212,6 +202,7 @@ bool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) { // We're done with the #included file. CurLexer.reset(); + CurPPLexer = 0; // This is the end of the top-level file. If the diag::pp_macro_not_used // diagnostic is enabled, look for macros that have not been used. -- cgit v1.2.3