Added two new overloaded versions of BatchEmitOwnedPtrs and

BatchReadOwnedPtrs.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44105 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Ted Kremenek 2007-11-14 08:05:03 +00:00
parent c498b0281f
commit 38afd9e3ac
3 changed files with 53 additions and 5 deletions

View File

@ -230,6 +230,32 @@ public:
}
}
template <typename T1, typename T2>
void BatchReadOwnedPtrs(unsigned NumT1Ptrs, T1** Ptrs, T2*& P2,
bool A1=true, bool A2=true) {
BatchIDVec.clear();
for (unsigned i = 0; i < NumT1Ptrs; ++i)
BatchIDVec.push_back(ReadPtrID());
SerializedPtrID ID2 = ReadPtrID();
for (unsigned i = 0; i < NumT1Ptrs; ++i) {
SerializedPtrID& PtrID = BatchIDVec[i];
T1* p = PtrID ? SerializeTrait<T1>::Create(*this) : NULL;
if (PtrID && A1)
RegisterPtr(PtrID,p);
Ptrs[i] = p;
}
P2 = (ID2) ? SerializeTrait<T2>::Create(*this) : NULL;
if (ID2 && A2) RegisterPtr(ID2,P2);
}
template <typename T1, typename T2, typename T3>
void BatchReadOwnedPtrs(unsigned NumT1Ptrs, T1** Ptrs,
T2*& P2, T3*& P3,

View File

@ -94,6 +94,20 @@ public:
if (Ptrs[i]) SerializeTrait<T>::Emit(*this,*Ptrs[i]);
}
template <typename T1, typename T2>
void BatchEmitOwnedPtrs(unsigned NumT1Ptrs, T1* const * Ptrs, T2* p2) {
for (unsigned i = 0; i < NumT1Ptrs; ++i)
EmitPtr(Ptrs[i]);
EmitPtr(p2);
for (unsigned i = 0; i < NumT1Ptrs; ++i)
if (Ptrs[i]) SerializeTrait<T1>::Emit(*this,*Ptrs[i]);
if (p2) SerializeTrait<T2>::Emit(*this,*p2);
}
template <typename T1, typename T2, typename T3>
void BatchEmitOwnedPtrs(unsigned NumT1Ptrs, T1* const * Ptrs,
T2* p2, T3* p3) {

View File

@ -13,6 +13,8 @@
#include "llvm/Bitcode/Deserialize.h"
#define DEBUG_BACKPATCH
#ifdef DEBUG_BACKPATCH
#include "llvm/Support/Streams.h"
#endif
@ -346,18 +348,24 @@ void Deserializer::ReadUIntPtr(uintptr_t& PtrRef,
return;
}
#ifdef DEBUG_BACKPATCH
llvm::cerr << "ReadUintPtr: " << PtrId << "\n";
#endif
MapTy::value_type& E = BPatchMap.FindAndConstruct(BPKey(PtrId));
if (HasFinalPtr(E))
if (HasFinalPtr(E)) {
PtrRef = GetFinalPtr(E);
#ifdef DEBUG_BACKPATCH
llvm::cerr << "ReadUintPtr: " << PtrId
<< " <-- " << (void*) GetFinalPtr(E) << '\n';
#endif
}
else {
assert (AllowBackpatch &&
"Client forbids backpatching for this pointer.");
#ifdef DEBUG_BACKPATCH
llvm::cerr << "ReadUintPtr: " << PtrId << " (NO PTR YET)\n";
#endif
// Register backpatch. Check the freelist for a BPNode.
BPNode* N;