From: Ted Kremenek Date: Wed, 19 Nov 2008 00:46:18 +0000 (+0000) Subject: - Move static function IsNonPragmaNonMacroLexer into Preprocessor.h. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0a3626444039396802fa35db24733c1963aebfac;p=clang - Move static function IsNonPragmaNonMacroLexer into Preprocessor.h. - Add variants of IsNonPragmaNonMacroLexer to accept an IncludeMacroStack entry (simplifies some uses). - Use IsNonPragmaNonMacroLexer in Preprocessor::LookupFile. Performance testing of -Eonly on Cocoa.h shows no performance regression because of this patch. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59574 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Lex/Preprocessor.h b/include/clang/Lex/Preprocessor.h index 999ba3b4f3..a95837653f 100644 --- a/include/clang/Lex/Preprocessor.h +++ b/include/clang/Lex/Preprocessor.h @@ -598,6 +598,23 @@ private: bool isAngled, const DirectoryLookup *FromDir, const DirectoryLookup *&CurDir); + + static bool IsNonPragmaNonMacroLexer(const Lexer* L, + const PreprocessorLexer* P) { + if (L) + return !L->isPragmaLexer(); + else + return P != 0; + } + + static bool IsNonPragmaNonMacroLexer(const IncludeStackInfo& I) { + return IsNonPragmaNonMacroLexer(I.TheLexer, I.ThePPLexer); + } + + bool IsNonPragmaNonMacroLexer() const { + return IsNonPragmaNonMacroLexer(CurLexer.get(), CurPPLexer); + } + //===--------------------------------------------------------------------===// // Caching stuff. void CachingLex(Token &Result); diff --git a/lib/Lex/PPDirectives.cpp b/lib/Lex/PPDirectives.cpp index 07c5f8ea68..cee2f406cd 100644 --- a/lib/Lex/PPDirectives.cpp +++ b/lib/Lex/PPDirectives.cpp @@ -317,7 +317,7 @@ const FileEntry *Preprocessor::LookupFile(const char *FilenameStart, // Otherwise, see if this is a subframework header. If so, this is relative // to one of the headers on the #include stack. Walk the list of the current // headers on the #include stack and pass them to HeaderInfo. - if (CurLexer && !CurLexer->Is_PragmaLexer) { + if (IsNonPragmaNonMacroLexer()) { if ((CurFileEnt = SourceMgr.getFileEntryForLoc(CurLexer->getFileLoc()))) if ((FE = HeaderInfo.LookupSubframeworkHeader(FilenameStart, FilenameEnd, CurFileEnt))) @@ -326,7 +326,7 @@ const FileEntry *Preprocessor::LookupFile(const char *FilenameStart, for (unsigned i = 0, e = IncludeMacroStack.size(); i != e; ++i) { IncludeStackInfo &ISEntry = IncludeMacroStack[e-i-1]; - if (ISEntry.TheLexer && !ISEntry.TheLexer->Is_PragmaLexer) { + if (IsNonPragmaNonMacroLexer(ISEntry)) { if ((CurFileEnt = SourceMgr.getFileEntryForLoc(ISEntry.TheLexer->getFileLoc()))) if ((FE = HeaderInfo.LookupSubframeworkHeader(FilenameStart, diff --git a/lib/Lex/PPLexerChange.cpp b/lib/Lex/PPLexerChange.cpp index 87330983d6..c16abf4313 100644 --- a/lib/Lex/PPLexerChange.cpp +++ b/lib/Lex/PPLexerChange.cpp @@ -25,28 +25,19 @@ 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 +82,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);