Introduce SourceManager::PredefinesFileID, to allow each checking of whether

a source location came from the predefines buffer.

llvm-svn: 174190
This commit is contained in:
Argyrios Kyrtzidis 2013-02-01 16:36:07 +00:00
parent 4985b8766e
commit 22c22f5f9a
2 changed files with 13 additions and 0 deletions

View File

@ -348,6 +348,9 @@ class Preprocessor : public RefCountedBase<Preprocessor> {
/// should use from the command line etc. /// should use from the command line etc.
std::string Predefines; std::string Predefines;
/// \brief The file ID for the preprocessor predefines.
FileID PredefinesFileID;
/// TokenLexerCache - Cache macro expanders to reduce malloc traffic. /// TokenLexerCache - Cache macro expanders to reduce malloc traffic.
enum { TokenLexerCacheSize = 8 }; enum { TokenLexerCacheSize = 8 };
unsigned NumCachedTokenLexers; unsigned NumCachedTokenLexers;
@ -503,6 +506,9 @@ public:
/// expansions going on at the time. /// expansions going on at the time.
PreprocessorLexer *getCurrentFileLexer() const; PreprocessorLexer *getCurrentFileLexer() const;
/// \brief Returns the file ID for the preprocessor predefines.
FileID getPredefinesFileID() { return PredefinesFileID; }
/// getPPCallbacks/addPPCallbacks - Accessors for preprocessor callbacks. /// getPPCallbacks/addPPCallbacks - Accessors for preprocessor callbacks.
/// Note that this class takes ownership of any PPCallbacks object given to /// Note that this class takes ownership of any PPCallbacks object given to
/// it. /// it.
@ -1357,6 +1363,12 @@ private:
/// start getting tokens from it using the PTH cache. /// start getting tokens from it using the PTH cache.
void EnterSourceFileWithPTH(PTHLexer *PL, const DirectoryLookup *Dir); void EnterSourceFileWithPTH(PTHLexer *PL, const DirectoryLookup *Dir);
/// \brief Set the file ID for the preprocessor predefines.
void setPredefinesFileID(FileID FID) {
assert(PredefinesFileID.isInvalid() && "PredefinesFileID already set!");
PredefinesFileID = FID;
}
/// IsFileLexer - Returns true if we are lexing from a file and not a /// IsFileLexer - Returns true if we are lexing from a file and not a
/// pragma or a macro. /// pragma or a macro.
static bool IsFileLexer(const Lexer* L, const PreprocessorLexer* P) { static bool IsFileLexer(const Lexer* L, const PreprocessorLexer* P) {

View File

@ -483,6 +483,7 @@ void Preprocessor::EnterMainSourceFile() {
assert(SB && "Cannot create predefined source buffer"); assert(SB && "Cannot create predefined source buffer");
FileID FID = SourceMgr.createFileIDForMemBuffer(SB); FileID FID = SourceMgr.createFileIDForMemBuffer(SB);
assert(!FID.isInvalid() && "Could not create FileID for predefines?"); assert(!FID.isInvalid() && "Could not create FileID for predefines?");
setPredefinesFileID(FID);
// Start parsing the predefines. // Start parsing the predefines.
EnterSourceFile(FID, 0, SourceLocation()); EnterSourceFile(FID, 0, SourceLocation());