diff options
author | Douglas Gregor <dgregor@apple.com> | 2011-07-29 00:21:44 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2011-07-29 00:21:44 +0000 |
commit | 8ab4ea8571ae644dc15f7cc77af03ac0a499c3fb (patch) | |
tree | b37ba86b42da8ab076ffb1ed0d4c816717ed89cb | |
parent | 530341d748ea9f9735ddf31b12ed9f5074471669 (diff) | |
download | bcm5719-llvm-8ab4ea8571ae644dc15f7cc77af03ac0a499c3fb.tar.gz bcm5719-llvm-8ab4ea8571ae644dc15f7cc77af03ac0a499c3fb.zip |
Move the base type ID from the ASTReader's global type map into the
Module itself, which makes more sense. This pattern to be repeated
several more times.
llvm-svn: 136436
-rw-r--r-- | clang/include/clang/Serialization/ASTReader.h | 6 | ||||
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 13 |
2 files changed, 10 insertions, 9 deletions
diff --git a/clang/include/clang/Serialization/ASTReader.h b/clang/include/clang/Serialization/ASTReader.h index 41cf09ad641..a42d97eba6a 100644 --- a/clang/include/clang/Serialization/ASTReader.h +++ b/clang/include/clang/Serialization/ASTReader.h @@ -360,6 +360,9 @@ public: /// type ID, or the representation of a Type*. const uint32_t *TypeOffsets; + /// \brief Base type ID for types local to this module. + serialization::TypeID BaseTypeID; + // === Miscellaneous === /// \brief Diagnostic IDs and their mappings that the user changed. @@ -537,8 +540,7 @@ private: /// ID = (I + 1) << FastQual::Width has already been loaded std::vector<QualType> TypesLoaded; - typedef ContinuousRangeMap<serialization::TypeID, - std::pair<Module *, int32_t>, 4> + typedef ContinuousRangeMap<serialization::TypeID, Module *, 4> GlobalTypeMapType; /// \brief Mapping from global type IDs to the module in which the diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 34af0b70db9..77286b78984 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -2054,12 +2054,11 @@ ASTReader::ReadASTBlock(Module &F) { } F.TypeOffsets = (const uint32_t *)BlobStart; F.LocalNumTypes = Record[0]; - + F.BaseTypeID = getTotalNumTypes(); + // Introduce the global -> local mapping for types within this // AST file. - GlobalTypeMap.insert(std::make_pair(getTotalNumTypes() + 1, - std::make_pair(&F, - -getTotalNumTypes()))); + GlobalTypeMap.insert(std::make_pair(getTotalNumTypes() + 1, &F)); TypesLoaded.resize(TypesLoaded.size() + F.LocalNumTypes); break; @@ -3218,8 +3217,8 @@ void ASTReader::ReadPragmaDiagnosticMappings(Diagnostic &Diag) { ASTReader::RecordLocation ASTReader::TypeCursorForIndex(unsigned Index) { GlobalTypeMapType::iterator I = GlobalTypeMap.find(Index+1); assert(I != GlobalTypeMap.end() && "Corrupted global type map"); - return RecordLocation(I->second.first, - I->second.first->TypeOffsets[Index + I->second.second]); + Module *M = I->second; + return RecordLocation(M, M->TypeOffsets[Index - M->BaseTypeID]); } /// \brief Read and return the type with the given index.. @@ -4374,7 +4373,7 @@ void ASTReader::dump() { llvm::errs() << "*** AST File Remapping:\n"; dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap); dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap); - dumpModuleIDOffsetMap("Global type map", GlobalTypeMap); + dumpModuleIDMap("Global type map", GlobalTypeMap); dumpModuleIDOffsetMap("Global declaration map", GlobalDeclMap); dumpModuleIDOffsetMap("Global identifier map", GlobalIdentifierMap); dumpModuleIDOffsetMap("Global selector map", GlobalSelectorMap); |