[vmkit-commits] [vmkit] r101677 - /vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Sat Apr 17 14:32:07 PDT 2010
Author: geoffray
Date: Sat Apr 17 16:32:07 2010
New Revision: 101677
URL: http://llvm.org/viewvc/llvm-project?rev=101677&view=rev
Log:
Actually look at the original referenced method to see if it is an interface.
Modified:
vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp
Modified: vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp?rev=101677&r1=101676&r2=101677&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp Sat Apr 17 16:32:07 2010
@@ -612,6 +612,8 @@
CommonClass* ctpCl = 0;
const UTF8* utf8 = 0;
Signdef* sign = 0;
+ JavaMethod* origMeth = 0;
+ ctpInfo->infoOfMethod(ctpIndex, ACC_VIRTUAL, ctpCl, origMeth);
ctpInfo->resolveMethod(ctpIndex, ctpCl, utf8, sign);
assert(cl->isAssignableFrom(ctpCl) && "Wrong call object");
@@ -631,7 +633,7 @@
"The method's offset is greater than the virtual table size");
((void**)obj->getVirtualTable())[Virt->offset] = result;
- if (CLInfo->bytecode == 0xB9) { // INVOKEINTERFACE
+ if (isInterface(origMeth->classDef->access)) {
InterfaceMethodTable* IMT = cl->virtualVT->IMT;
uint32_t index = InterfaceMethodTable::getIndex(Virt->name, Virt->type);
if ((IMT->contents[index] & 1) == 0) {
More information about the vmkit-commits
mailing list