зеркало из https://github.com/microsoft/clang-1.git
Add PTHManager::getOriginalSourceFile(), a method that returns the name of the
original source file (if any) that was used to generate the PTH cache. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67343 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
d5cded4043
Коммит
6822863401
|
@ -69,12 +69,16 @@ class PTHManager : public IdentifierInfoLookup {
|
|||
/// contains the cached spellings for literals.
|
||||
const unsigned char* const SpellingBase;
|
||||
|
||||
/// OriginalSourceFile - A null-terminated C-string that specifies the name
|
||||
/// if the file (if any) that was to used to generate the PTH cache.
|
||||
const char* OriginalSourceFile;
|
||||
|
||||
/// This constructor is intended to only be called by the static 'Create'
|
||||
/// method.
|
||||
PTHManager(const llvm::MemoryBuffer* buf, void* fileLookup,
|
||||
const unsigned char* idDataTable, IdentifierInfo** perIDCache,
|
||||
void* stringIdLookup, unsigned numIds,
|
||||
const unsigned char* spellingBase);
|
||||
const unsigned char* spellingBase, const char *originalSourceFile);
|
||||
|
||||
// Do not implement.
|
||||
PTHManager();
|
||||
|
@ -96,10 +100,16 @@ class PTHManager : public IdentifierInfoLookup {
|
|||
|
||||
public:
|
||||
// The current PTH version.
|
||||
enum { Version = 8 };
|
||||
enum { Version = 9 };
|
||||
|
||||
~PTHManager();
|
||||
|
||||
/// getOriginalSourceFile - Return the full path to the original header
|
||||
/// file name that was used to generate the PTH cache.
|
||||
const char* getOriginalSourceFile() const {
|
||||
return OriginalSourceFile;
|
||||
}
|
||||
|
||||
/// get - Return the identifier token info for the specified named identifier.
|
||||
/// Unlike the version in IdentifierTable, this returns a pointer instead
|
||||
/// of a reference. If the pointer is NULL then the IdentifierInfo cannot
|
||||
|
|
|
@ -569,10 +569,12 @@ PTHManager::PTHManager(const llvm::MemoryBuffer* buf, void* fileLookup,
|
|||
const unsigned char* idDataTable,
|
||||
IdentifierInfo** perIDCache,
|
||||
void* stringIdLookup, unsigned numIds,
|
||||
const unsigned char* spellingBase)
|
||||
const unsigned char* spellingBase,
|
||||
const char* originalSourceFile)
|
||||
: Buf(buf), PerIDCache(perIDCache), FileLookup(fileLookup),
|
||||
IdDataTable(idDataTable), StringIdLookup(stringIdLookup),
|
||||
NumIds(numIds), PP(0), SpellingBase(spellingBase) {}
|
||||
NumIds(numIds), PP(0), SpellingBase(spellingBase),
|
||||
OriginalSourceFile(originalSourceFile) {}
|
||||
|
||||
PTHManager::~PTHManager() {
|
||||
delete Buf;
|
||||
|
@ -701,10 +703,17 @@ PTHManager* PTHManager::Create(const std::string& file, Diagnostic* Diags) {
|
|||
}
|
||||
}
|
||||
|
||||
// Compute the address of the original source file.
|
||||
const unsigned char* originalSourceBase = PrologueOffset + sizeof(uint32_t)*4;
|
||||
unsigned len = ReadUnalignedLE16(originalSourceBase);
|
||||
if (!len) originalSourceBase = 0;
|
||||
|
||||
// Create the new PTHManager.
|
||||
return new PTHManager(File.take(), FL.take(), IData, PerIDCache,
|
||||
SL.take(), NumIds, spellingBase);
|
||||
SL.take(), NumIds, spellingBase,
|
||||
(const char*) originalSourceBase);
|
||||
}
|
||||
|
||||
IdentifierInfo* PTHManager::LazilyCreateIdentifierInfo(unsigned PersistentID) {
|
||||
// Look in the PTH file for the string data for the IdentifierInfo object.
|
||||
const unsigned char* TableEntry = IdDataTable + sizeof(uint32_t)*PersistentID;
|
||||
|
|
Загрузка…
Ссылка в новой задаче