]> granicus.if.org Git - clang/commitdiff
Move the base type ID from the ASTReader's global type map into the
authorDouglas Gregor <dgregor@apple.com>
Fri, 29 Jul 2011 00:21:44 +0000 (00:21 +0000)
committerDouglas Gregor <dgregor@apple.com>
Fri, 29 Jul 2011 00:21:44 +0000 (00:21 +0000)
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

include/clang/Serialization/ASTReader.h
lib/Serialization/ASTReader.cpp

index 41cf09ad641c5ea9f1f90ce2fa2c5734e36964bd..a42d97eba6a6d4531d1cea73442f50c4f6076147 100644 (file)
@@ -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
index 34af0b70db9af620fbef8ca6ecb091896c85548f..77286b78984f21b8fc0ad3f16edc54baebf15eab 100644 (file)
@@ -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);