本文整理汇总了C++中UserClass::lookupSpecialMethodDontThrow方法的典型用法代码示例。如果您正苦于以下问题:C++ UserClass::lookupSpecialMethodDontThrow方法的具体用法?C++ UserClass::lookupSpecialMethodDontThrow怎么用?C++ UserClass::lookupSpecialMethodDontThrow使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类UserClass
的用法示例。
在下文中一共展示了UserClass::lookupSpecialMethodDontThrow方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Walker
extern "C" void* j3ResolveSpecialStub() {
JavaThread *th = JavaThread::get();
void* result = NULL;
// Lookup the caller of this class.
vmkit::StackWalker Walker(th);
++Walker; // Remove the stub.
vmkit::FrameInfo* FI = Walker.get();
assert(FI->Metadata != NULL && "Wrong stack trace");
JavaMethod* caller = (JavaMethod*)FI->Metadata;
// Lookup the method info in the constant pool of the caller.
uint16 ctpIndex = caller->lookupCtpIndex(FI);
assert(ctpIndex && "No constant pool index");
JavaConstantPool* ctpInfo = caller->classDef->getConstantPool();
CommonClass* cl = 0;
const UTF8* utf8 = 0;
Signdef* sign = 0;
ctpInfo->resolveMethod(ctpIndex, cl, utf8, sign);
UserClass* lookup = cl->isArray() ? cl->super : cl->asClass();
assert(lookup->isInitializing() && "Class not ready");
JavaMethod* callee =
lookup->lookupSpecialMethodDontThrow(utf8, sign->keyName, caller->classDef);
if (!callee) {
th->getJVM()->noSuchMethodError(lookup, utf8);
}
if (isAbstract(callee->access)) {
JavaThread::get()->getJVM()->abstractMethodError(callee->classDef, callee->name);
}
// Compile the found method.
result = callee->compiledPtr();
// Update the entry in the constant pool.
ctpInfo->ctpRes[ctpIndex] = result;
return result;
}