--- interp.c.orig 2004-05-19 12:25:08.000000000 +0100 +++ interp.c 2004-07-05 12:22:56.000000000 +0100 @@ -1311,12 +1311,18 @@ DEF_OPC(OPC_INVOKEINTERFACE) frame->last_pc = (unsigned char*)pc; - resolveInterfaceMethod(mb->class, CP_DINDEX(pc)); + new_mb = resolveInterfaceMethod(mb->class, CP_DINDEX(pc)); if(exceptionOccured0(ee)) goto throwException; - OPCODE_REWRITE(pc, OPC_INVOKEINTERFACE_QUICK); + if(CLASS_CB(new_mb->class)->access_flags & ACC_INTERFACE) + OPCODE_REWRITE(pc, OPC_INVOKEINTERFACE_QUICK); + else { + pc[3] = pc[4] = OPC_NOP; + OPCODE_REWRITE(pc, OPC_INVOKEVIRTUAL); + } + DISPATCH(pc) DEF_OPC(OPC_INVOKEINTERFACE_QUICK)