]> granicus.if.org Git - clang/commitdiff
Renamed SourceManager::Read to SourceManager::CreateAndRegister.
authorTed Kremenek <kremenek@apple.com>
Wed, 5 Dec 2007 00:19:51 +0000 (00:19 +0000)
committerTed Kremenek <kremenek@apple.com>
Wed, 5 Dec 2007 00:19:51 +0000 (00:19 +0000)
Now sourcemanager deserializer automatically self-registers itself with
the deserializer.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44591 91177308-0d34-0410-b5e6-96231b3b80d8

Basic/SourceManager.cpp
include/clang/Basic/SourceManager.h

index 3d32eb8188067668a3492d86166dc603a5f95fb6..2cb2b5ba1542fa74f6f6bbf859778ad2ed8059c5 100644 (file)
@@ -490,6 +490,9 @@ MacroIDInfo MacroIDInfo::ReadVal(llvm::Deserializer& D) {
 }
 
 void SourceManager::Emit(llvm::Serializer& S) const {
+  S.EnterBlock();
+  S.EmitPtr(this);
+  
   // Emit: FileInfos.  Just emit the file name.
   S.EnterBlock();    
 
@@ -513,32 +516,40 @@ void SourceManager::Emit(llvm::Serializer& S) const {
   // Emit: MacroIDs
   S.EmitInt(MacroIDs.size());  
   std::for_each(MacroIDs.begin(), MacroIDs.end(), S.MakeEmitter<MacroIDInfo>());
+  
+  S.ExitBlock();
 }
 
-void SourceManager::Read(llvm::Deserializer& D, FileManager& FMgr) {
+SourceManager*
+SourceManager::CreateAndRegister(llvm::Deserializer& D, FileManager& FMgr){
+  SourceManager *M = new SourceManager();
+  D.RegisterPtr(M);
+  
   std::vector<char> Buf;
     
   { // Read: FileInfos.
     llvm::Deserializer::Location BLoc = D.getCurrentBlockLocation();
     while (!D.FinishedBlock(BLoc))
-    ContentCache::ReadToSourceManager(D,*this,&FMgr,Buf);
+    ContentCache::ReadToSourceManager(D,*M,&FMgr,Buf);
   }
     
   { // Read: MemBufferInfos.
     llvm::Deserializer::Location BLoc = D.getCurrentBlockLocation();
     while (!D.FinishedBlock(BLoc))
-    ContentCache::ReadToSourceManager(D,*this,NULL,Buf);
+    ContentCache::ReadToSourceManager(D,*M,NULL,Buf);
   }
   
   // Read: FileIDs.
   unsigned Size = D.ReadInt();
-  FileIDs.reserve(Size);
+  M->FileIDs.reserve(Size);
   for (; Size > 0 ; --Size)
-    FileIDs.push_back(FileIDInfo::ReadVal(D));
+    M->FileIDs.push_back(FileIDInfo::ReadVal(D));
   
   // Read: MacroIDs.
   Size = D.ReadInt();
-  MacroIDs.reserve(Size);
+  M->MacroIDs.reserve(Size);
   for (; Size > 0 ; --Size)
-    MacroIDs.push_back(MacroIDInfo::ReadVal(D));
+    M->MacroIDs.push_back(MacroIDInfo::ReadVal(D));
+  
+  return M;
 }
\ No newline at end of file
index bcce27bb89a9ff753dce5a7dea1854a96f37db8b..325f9ed106da092197759a283ff674f9e39ac992 100644 (file)
@@ -366,7 +366,8 @@ public:
   void Emit(llvm::Serializer& S) const;
   
   /// Read - Reconstitute a SourceManager from Bitcode.
-  void Read(llvm::Deserializer& S, FileManager &FMgr);
+  static SourceManager* CreateAndRegister(llvm::Deserializer& S,
+                                          FileManager &FMgr);
   
 private:
   friend class SrcMgr::ContentCache; // Used for deserialization.