[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