summaryrefslogtreecommitdiffstats
path: root/clang/Basic/SourceManager.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2007-12-04 19:39:02 +0000
committerTed Kremenek <kremenek@apple.com>2007-12-04 19:39:02 +0000
commitc638952f596846c2fb99789f26e666b8b28da126 (patch)
treeb78f8a5e3df02c13b47dc902ebb134c5330a3e57 /clang/Basic/SourceManager.cpp
parentf256b48bc70b534f2790f9cf3e0f0ba5ab84bc53 (diff)
downloadbcm5719-llvm-c638952f596846c2fb99789f26e666b8b28da126.tar.gz
bcm5719-llvm-c638952f596846c2fb99789f26e666b8b28da126.zip
Implemented serialization of SrcMgr::ContentCache.
llvm-svn: 44578
Diffstat (limited to 'clang/Basic/SourceManager.cpp')
-rw-r--r--clang/Basic/SourceManager.cpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/clang/Basic/SourceManager.cpp b/clang/Basic/SourceManager.cpp
index 03fa203b2e5..0b3af9853fb 100644
--- a/clang/Basic/SourceManager.cpp
+++ b/clang/Basic/SourceManager.cpp
@@ -406,3 +406,57 @@ void SourceManager::PrintStats() const {
std::cerr << NumFileBytesMapped << " bytes of files mapped, "
<< NumLineNumsComputed << " files with line #'s computed.\n";
}
+
+//===----------------------------------------------------------------------===//
+// Serialization.
+//===----------------------------------------------------------------------===//
+
+void SrcMgr::ContentCache::Emit(llvm::Serializer& S,
+ bool StoreBufferName,
+ bool StoreBufferContents) const {
+ S.FlushRecord();
+ S.EmitPtr(this);
+
+ if (StoreBufferName)
+ S.EmitCStr(Buffer->getBufferIdentifier());
+
+ if (StoreBufferContents) {
+ // Emit the contents of the memory buffer.
+ // FIXME: use abbreviations to optimize this.
+ S.FlushRecord();
+
+ const char* p = Buffer->getBufferStart();
+ const char* e = Buffer->getBufferEnd();
+
+ S.EmitInt(p-e);
+
+ for ( ; p != e; ++p)
+ S.EmitInt(*p);
+
+ S.FlushRecord();
+ }
+}
+
+void SrcMgr::ContentCache::Read(llvm::Deserializer& D,
+ std::vector<char>* BufferNameBuf,
+ bool ReadBufferContents) {
+ D.RegisterPtr(this);
+ const char* BufferName = "";
+
+ if (BufferNameBuf) {
+ D.ReadCStr(*BufferNameBuf);
+ BufferName = &(*BufferNameBuf)[0];
+ }
+
+ if (ReadBufferContents) {
+ char *BufferName = D.ReadCStr();
+ unsigned Size = D.ReadInt();
+ Buffer = MemoryBuffer::getNewUninitMemBuffer(Size,BufferName);
+ char* p = const_cast<char*>(Buffer->getBufferStart());
+ const char* e = Buffer->getBufferEnd();
+ for ( ; p != e ; ++p )
+ *p = (char) D.ReadInt();
+ }
+ else
+ Buffer = MemoryBuffer::getNewUninitMemBuffer(0,BufferName);
+}
OpenPOWER on IntegriCloud