aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2007-11-12 19:11:15 +0000
committerTed Kremenek <kremenek@apple.com>2007-11-12 19:11:15 +0000
commit62724da93086e52f8b48fa4c4b06309db330b5c8 (patch)
tree9a5bbdee71c10f85be217d6ac165e193880a3712
parent35e2dba67215045b1be2b890699788adfa939d05 (diff)
Added versions of ReadPtr that takes an explicit SerializedPtrID. This allows
clients of the Deserializer to read the pointer ID before they are ready to deserialize the object (which can mean registering a pointer reference with the backpatcher). Changed some methods that took an argument "SerializedPtrID" to "const SerializedPtrID&" (pass-by-reference). This is to accommodate a future revision of SerializedPtrID where it may be much fatter than an unsigned integer. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44021 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/Bitcode/Deserialize.h24
-rw-r--r--lib/Bitcode/Reader/Deserialize.cpp10
2 files changed, 27 insertions, 7 deletions
diff --git a/include/llvm/Bitcode/Deserialize.h b/include/llvm/Bitcode/Deserialize.h
index d8e3b38f4e..f69bdffad2 100644
--- a/include/llvm/Bitcode/Deserialize.h
+++ b/include/llvm/Bitcode/Deserialize.h
@@ -240,10 +240,28 @@ public:
ReadPtr(const_cast<T*&>(PtrRef), AllowBackpatch);
}
+
+ template <typename T>
+ void ReadPtr(T*& PtrRef, const SerializedPtrID& PtrID, bool AllowBackpatch = true) {
+ ReadUIntPtr(reinterpret_cast<uintptr_t&>(PtrRef), PtrID, AllowBackpatch);
+ }
+
+ template <typename T>
+ void ReadPtr(const T*& PtrRef, const SerializedPtrID& PtrID,
+ bool AllowBackpatch = true) {
+
+ ReadPtr(const_cast<T*&>(PtrRef), PtrID, AllowBackpatch);
+ }
+
template <typename T>
T* ReadPtr() { T* x; ReadPtr<T>(x,false); return x; }
- void ReadUIntPtr(uintptr_t& PtrRef, bool AllowBackpatch = true);
+ void ReadUIntPtr(uintptr_t& PtrRef, const SerializedPtrID& PtrID,
+ bool AllowBackpatch = true);
+
+ void ReadUIntPtr(uintptr_t& PtrRef, bool AllowBackpatch = true) {
+ ReadUIntPtr(PtrRef,ReadPtrID(),AllowBackpatch);
+ }
template <typename T>
T& ReadRef() {
@@ -251,7 +269,7 @@ public:
return *p;
}
- void RegisterPtr(SerializedPtrID PtrId, const void* Ptr);
+ void RegisterPtr(const SerializedPtrID& PtrID, const void* Ptr);
void RegisterPtr(const void* Ptr) {
RegisterPtr(ReadPtrID(),Ptr);
@@ -263,7 +281,7 @@ public:
}
template<typename T>
- void RegisterRef(SerializedPtrID PtrID, const T& x) {
+ void RegisterRef(const SerializedPtrID& PtrID, const T& x) {
RegisterPtr(PtrID,&x);
}
diff --git a/lib/Bitcode/Reader/Deserialize.cpp b/lib/Bitcode/Reader/Deserialize.cpp
index 2e8b4ef08c..ea6b27a62e 100644
--- a/lib/Bitcode/Reader/Deserialize.cpp
+++ b/lib/Bitcode/Reader/Deserialize.cpp
@@ -324,7 +324,9 @@ void Deserializer::ReadCStr(std::vector<char>& buff, bool isNullTerm) {
buff.push_back('\0');
}
-void Deserializer::RegisterPtr(SerializedPtrID PtrId, const void* Ptr) {
+void Deserializer::RegisterPtr(const SerializedPtrID& PtrId,
+ const void* Ptr) {
+
MapTy::value_type& E = BPatchMap.FindAndConstruct(BPKey(PtrId));
assert (!HasFinalPtr(E) && "Pointer already registered.");
@@ -336,9 +338,9 @@ void Deserializer::RegisterPtr(SerializedPtrID PtrId, const void* Ptr) {
SetPtr(E,Ptr);
}
-void Deserializer::ReadUIntPtr(uintptr_t& PtrRef, bool AllowBackpatch) {
- SerializedPtrID PtrId = ReadPtrID();
-
+void Deserializer::ReadUIntPtr(uintptr_t& PtrRef,
+ const SerializedPtrID& PtrId,
+ bool AllowBackpatch) {
if (PtrId == 0) {
PtrRef = 0;
return;