From: Ted Kremenek Date: Wed, 5 Dec 2007 00:19:51 +0000 (+0000) Subject: Renamed SourceManager::Read to SourceManager::CreateAndRegister. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1f94100e53a7d45cea706c09ac0f35cf723a8d83;p=clang Renamed SourceManager::Read to SourceManager::CreateAndRegister. 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 --- diff --git a/Basic/SourceManager.cpp b/Basic/SourceManager.cpp index 3d32eb8188..2cb2b5ba15 100644 --- a/Basic/SourceManager.cpp +++ b/Basic/SourceManager.cpp @@ -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()); + + 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 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 diff --git a/include/clang/Basic/SourceManager.h b/include/clang/Basic/SourceManager.h index bcce27bb89..325f9ed106 100644 --- a/include/clang/Basic/SourceManager.h +++ b/include/clang/Basic/SourceManager.h @@ -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.