From 2e09163890b51aa8766564780154531451a3cf0b Mon Sep 17 00:00:00 2001 From: "Jonathan D. Turner" Date: Fri, 29 Jul 2011 18:09:09 +0000 Subject: [PATCH] Renamed Loaded member to ImportedBy, as it's easier to read. Added another set to represent the modules a module imports. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@136476 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Serialization/ASTReader.h | 9 ++++++--- lib/Serialization/ASTReader.cpp | 13 +++++++++---- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/include/clang/Serialization/ASTReader.h b/include/clang/Serialization/ASTReader.h index 1d6c536f28..bcf5384bc6 100644 --- a/include/clang/Serialization/ASTReader.h +++ b/include/clang/Serialization/ASTReader.h @@ -32,6 +32,7 @@ #include "llvm/ADT/APInt.h" #include "llvm/ADT/APSInt.h" #include "llvm/ADT/OwningPtr.h" +#include "llvm/ADT/SetVector.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" #include "llvm/Bitcode/BitstreamReader.h" @@ -397,9 +398,11 @@ public: /// preprocessing record. unsigned NumPreallocatedPreprocessingEntities; - /// \brief All the modules that loaded this one. Can contain NULL for - /// directly loaded modules. - SmallVector Loaders; + /// \brief List of modules which depend on this module + llvm::SetVector ImportedBy; + + /// \brief List of modules which this module depends on + llvm::SetVector Imports; }; /// \brief The manager for modules loaded by the ASTReader. diff --git a/lib/Serialization/ASTReader.cpp b/lib/Serialization/ASTReader.cpp index f5c2ec39d7..d8f6c6a640 100644 --- a/lib/Serialization/ASTReader.cpp +++ b/lib/Serialization/ASTReader.cpp @@ -1380,9 +1380,10 @@ ASTReader::ASTReadResult ASTReader::ReadSLocEntryRecord(int ID) { SourceLocation ASTReader::getImportLocation(Module *F) { if (F->ImportLoc.isValid()) return F->ImportLoc; + // Otherwise we have a PCH. It's considered to be "imported" at the first // location of its includer. - if (F->Loaders.empty() || !F->Loaders[0]) { + if (F->ImportedBy.empty() || !F->ImportedBy[0]) { // Main file is the importer. We assume that it is the first entry in the // entry table. We can't ask the manager, because at the time of PCH loading // the main file entry doesn't exist yet. @@ -1390,7 +1391,8 @@ SourceLocation ASTReader::getImportLocation(Module *F) { // offsets 0 and 1. return SourceLocation::getFromRawEncoding(2U); } - return F->Loaders[0]->FirstLoc; + //return F->Loaders[0]->FirstLoc; + return F->ImportedBy[0]->FirstLoc; } /// ReadBlockAbbrevs - Enter a subblock of the specified BlockID with the @@ -5466,8 +5468,11 @@ Module &ModuleManager::addModule(StringRef FileName, ModuleKind Type) { const FileEntry *Entry = FileMgr.getFile(FileName); Modules[Entry] = Current; - Current->Loaders.push_back(Prev); - + if (Prev) { + Current->ImportedBy.insert(Prev); + Prev->Imports.insert(Current); + } + return *Current; } -- 2.40.0