從doxygen拽,ClonedCodeInfo
類可用於獲取信息傳回有關您剛剛克隆,即不論是否功能該函數包含調用或動態分配指令。
再次documentation爲ValueMapTypeRemapper
告訴我們這是一個抽象的基類,要求任何子類實現其remapType()
方法。顧名思義,這可以用來用其他類型替換函數中的某些類型。
下面是一些示例代碼:
class MessageUpdater: public ValueMapTypeRemapper
{
public:
Type *remapType(Type *SrcTy)
{
std::map<Type *, Type *>::iterator i, e;
for (i = foo.begin(), e = foo.end(); i != e; ++i) {
if (SrcTy == i->first) {
return i->second;
}
}
assert(0 && "Type not found in map!");
return 0;
}
std::map<Type *, Type *> foo;
};
你可以這樣調用:
MessageUpdater foobar;
foobar.foo.insert(std::make_pair(fromStruct, toStruct));
foobar.foo.insert(std::make_pair(fromStructPtr, toStructPtr));
foobar.foo.insert(std::make_pair(fromStructPtrPtr, toStructPtrPtr));
for (inst_iterator I = inst_begin(f), E = inst_end(f); I != E; ++I) {
foobar.foo.insert(std::make_pair(I->getType(), I->getType()));
}
std::map<Type *, Type *>::iterator i, e;
for (i = foobar.foo.begin(), e = foobar.foo.end(); i != e; ++i) {
errs() << *i->first << " maps to " << *i->second << "\n";
}
CloneFunctionInto(newFun, f, vmap, false, Returns, "", 0, &foobar);
你會發現,你是不是需要一個ClonedCodeInfo
對象傳遞到這個功能,所以我只通過0.
我看不到'vmap'來自哪裏代碼。 – arrowd