Skip to content

Commit

Permalink
Move the base type ID from the ASTReader's global type map into the
Browse files Browse the repository at this point in the history
Module itself, which makes more sense. This pattern to be repeated
several more times.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@136436 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
DougGregor committed Jul 29, 2011
1 parent e3b075b commit 1e849b6
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 9 deletions.
6 changes: 4 additions & 2 deletions include/clang/Serialization/ASTReader.h
Expand Up @@ -360,6 +360,9 @@ class Module {
/// 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.
Expand Down Expand Up @@ -537,8 +540,7 @@ class ASTReader
/// 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
Expand Down
13 changes: 6 additions & 7 deletions lib/Serialization/ASTReader.cpp
Expand Up @@ -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;

Expand Down Expand Up @@ -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..
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 1e849b6

Please sign in to comment.