From: Chris Lattner Date: Sat, 17 Jan 2009 08:03:42 +0000 (+0000) Subject: Change the Lexer ctor used in the non _Pragma case to take a FileID instead X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=88d3ac1341aa016cabd966c5b113a95ac05ea43f;p=clang Change the Lexer ctor used in the non _Pragma case to take a FileID instead of a SourceLocation. This should speed it up and definitely simplifies it. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62422 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Lex/Lexer.h b/include/clang/Lex/Lexer.h index ff89e8197d..00cf68eff5 100644 --- a/include/clang/Lex/Lexer.h +++ b/include/clang/Lex/Lexer.h @@ -77,7 +77,7 @@ public: /// with the specified preprocessor managing the lexing process. This lexer /// assumes that the associated file buffer and Preprocessor objects will /// outlive it, so it doesn't take ownership of either of them. - Lexer(SourceLocation FileLoc, Preprocessor &PP); + Lexer(FileID FID, Preprocessor &PP); Lexer(SourceLocation FileLoc, Preprocessor &PP, const char *BufStart, const char *BufEnd); diff --git a/lib/Lex/Lexer.cpp b/lib/Lex/Lexer.cpp index c379f58b0c..772a4d9684 100644 --- a/lib/Lex/Lexer.cpp +++ b/lib/Lex/Lexer.cpp @@ -94,17 +94,12 @@ void Lexer::InitLexer(const char *BufStart, const char *BufPtr, /// with the specified preprocessor managing the lexing process. This lexer /// assumes that the associated file buffer and Preprocessor objects will /// outlive it, so it doesn't take ownership of either of them. -Lexer::Lexer(SourceLocation fileloc, Preprocessor &PP) -// FIXME: This is really horrible and only needed for _Pragma lexers, split this -// out of the main lexer path! -: PreprocessorLexer(&PP, - PP.getSourceManager().getCanonicalFileID( - PP.getSourceManager().getSpellingLoc(fileloc))), - FileLoc(fileloc), - Features(PP.getLangOptions()) { +Lexer::Lexer(FileID FID, Preprocessor &PP) + : PreprocessorLexer(&PP, FID), + FileLoc(PP.getSourceManager().getLocForStartOfFile(FID)), + Features(PP.getLangOptions()) { - SourceManager &SourceMgr = PP.getSourceManager(); - const llvm::MemoryBuffer *InputFile = SourceMgr.getBuffer(getFileID()); + const llvm::MemoryBuffer *InputFile = PP.getSourceManager().getBuffer(FID); InitLexer(InputFile->getBufferStart(), InputFile->getBufferStart(), InputFile->getBufferEnd()); @@ -124,7 +119,7 @@ Lexer::Lexer(SourceLocation fileloc, Preprocessor &PP, : PreprocessorLexer(&PP, PP.getSourceManager().getCanonicalFileID( PP.getSourceManager().getSpellingLoc(fileloc))), - FileLoc(fileloc), + FileLoc(fileloc), Features(PP.getLangOptions()) { InitLexer(PP.getSourceManager().getBuffer(getFileID())->getBufferStart(), diff --git a/lib/Lex/PPLexerChange.cpp b/lib/Lex/PPLexerChange.cpp index cc8ccc4c10..60d42386d7 100644 --- a/lib/Lex/PPLexerChange.cpp +++ b/lib/Lex/PPLexerChange.cpp @@ -74,16 +74,10 @@ void Preprocessor::EnterSourceFile(FileID FID, const DirectoryLookup *CurDir) { MaxIncludeStackDepth = IncludeMacroStack.size(); if (PTH) { - PTHLexer *PL = PTH->CreateLexer(FID, SourceMgr.getFileEntryForID(FID)); - - if (PL) { - EnterSourceFileWithPTH(PL, CurDir); - return; - } + if (PTHLexer *PL = PTH->CreateLexer(FID, SourceMgr.getFileEntryForID(FID))) + return EnterSourceFileWithPTH(PL, CurDir); } - - Lexer *TheLexer = new Lexer(SourceMgr.getLocForStartOfFile(FID), *this); - EnterSourceFileWithLexer(TheLexer, CurDir); + EnterSourceFileWithLexer(new Lexer(FID, *this), CurDir); } /// EnterSourceFileWithLexer - Add a source file to the top of the include stack