- 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.

llvm-svn: 59574
This commit is contained in:
Ted Kremenek 2008-11-19 00:46:18 +00:00
parent c7a366309d
commit 1b167108bb
3 changed files with 24 additions and 16 deletions

View File

@ -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);

View File

@ -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,

View File

@ -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);