Record module loaders and module source order.

llvm-svn: 115334
This commit is contained in:
Sebastian Redl 2010-10-01 19:59:12 +00:00
parent 2d084d07c8
commit 3f6b753f9d
2 changed files with 22 additions and 3 deletions

View File

@ -193,7 +193,7 @@ private:
/// \brief The AST consumer.
ASTConsumer *Consumer;
/// \brief Information that is needed for every file in the chain.
/// \brief Information that is needed for every module.
struct PerFileData {
PerFileData();
~PerFileData();
@ -318,12 +318,25 @@ private:
///
/// The dynamic type of this stat cache is always ASTStatCache
void *StatCache;
/// \brief The number of preallocated preprocessing entities in the
/// preprocessing record.
unsigned NumPreallocatedPreprocessingEntities;
/// \brief The next module in source order.
PerFileData *NextInSource;
/// \brief All the modules that loaded this one. Can contain NULL for
/// directly loaded modules.
llvm::SmallVector<PerFileData *, 1> Loaders;
};
/// \brief All loaded modules, indexed by name.
llvm::StringMap<PerFileData*> Modules;
/// \brief The first module in source order.
PerFileData *FirstInSource;
/// \brief The chain of AST files. The first entry is the one named by the
/// user, the last one is the one that doesn't depend on anything further.
/// That is, the entry I was created with -include-pch I+1.

View File

@ -2122,8 +2122,14 @@ ASTReader::ASTReadResult ASTReader::ReadAST(const std::string &FileName) {
}
ASTReader::ASTReadResult ASTReader::ReadASTCore(llvm::StringRef FileName) {
PerFileData *Prev = Chain.empty() ? 0 : Chain.back();
Chain.push_back(new PerFileData());
PerFileData &F = *Chain.back();
if (Prev)
Prev->NextInSource = &F;
else
FirstInSource = &F;
F.Loaders.push_back(Prev);
// Set the AST file name.
F.FileName = FileName;
@ -4199,7 +4205,7 @@ ASTReader::PerFileData::PerFileData()
MacroDefinitionOffsets(0), LocalNumSelectors(0), SelectorOffsets(0),
SelectorLookupTableData(0), SelectorLookupTable(0), LocalNumDecls(0),
DeclOffsets(0), LocalNumTypes(0), TypeOffsets(0), StatCache(0),
NumPreallocatedPreprocessingEntities(0)
NumPreallocatedPreprocessingEntities(0), NextInSource(0)
{}
ASTReader::PerFileData::~PerFileData() {