2574 }
2575 }
2576 // Check that the entry is non-null. A null entry means
2577 // that the receiver class doesn't implement the
2578 // interface, and wasn't the same as when the caller was
2579 // compiled.
2580 if (scan->interface_klass() == NULL) {
2581 VM_JAVA_ERROR(vmSymbols::java_lang_IncompatibleClassChangeError(), "", note_no_trap);
2582 }
2583 }
2584
2585 itableOffsetEntry* ki = (itableOffsetEntry*) int2->start_of_itable();
2586 int i;
2587 for ( i = 0 ; i < int2->itable_length() ; i++, ki++ ) {
2588 if (ki->interface_klass() == iclass) break;
2589 }
2590 // If the interface isn't found, this class doesn't implement this
2591 // interface. The link resolver checks this but only for the first
2592 // time this interface is called.
2593 if (i == int2->itable_length()) {
2594 VM_JAVA_ERROR(vmSymbols::java_lang_IncompatibleClassChangeError(), "", note_no_trap);
2595 }
2596 int mindex = interface_method->itable_index();
2597
2598 itableMethodEntry* im = ki->first_method_entry(rcvr->klass());
2599 callee = im[mindex].method();
2600 if (callee == NULL) {
2601 VM_JAVA_ERROR(vmSymbols::java_lang_AbstractMethodError(), "", note_no_trap);
2602 }
2603
2604 // Profile virtual call.
2605 BI_PROFILE_UPDATE_VIRTUALCALL(rcvr->klass());
2606
2607 istate->set_callee(callee);
2608 istate->set_callee_entry_point(callee->from_interpreted_entry());
2609 #ifdef VM_JVMTI
2610 if (JvmtiExport::can_post_interpreter_events() && THREAD->is_interp_only_mode()) {
2611 istate->set_callee_entry_point(callee->interpreter_entry());
2612 }
2613 #endif /* VM_JVMTI */
2614 istate->set_bcp_advance(5);
2615 UPDATE_PC_AND_RETURN(0); // I'll be back...
2616 }
2617
2618 CASE(_invokevirtual):
2619 CASE(_invokespecial):
2620 CASE(_invokestatic): {
2621 u2 index = Bytes::get_native_u2(pc+1);
|
2574 }
2575 }
2576 // Check that the entry is non-null. A null entry means
2577 // that the receiver class doesn't implement the
2578 // interface, and wasn't the same as when the caller was
2579 // compiled.
2580 if (scan->interface_klass() == NULL) {
2581 VM_JAVA_ERROR(vmSymbols::java_lang_IncompatibleClassChangeError(), "", note_no_trap);
2582 }
2583 }
2584
2585 itableOffsetEntry* ki = (itableOffsetEntry*) int2->start_of_itable();
2586 int i;
2587 for ( i = 0 ; i < int2->itable_length() ; i++, ki++ ) {
2588 if (ki->interface_klass() == iclass) break;
2589 }
2590 // If the interface isn't found, this class doesn't implement this
2591 // interface. The link resolver checks this but only for the first
2592 // time this interface is called.
2593 if (i == int2->itable_length()) {
2594 CALL_VM(InterpreterRuntime::throw_IncompatibleClassChangeErrorVerbose(THREAD, rcvr->klass(), iclass),
2595 handle_exception);
2596 }
2597 int mindex = interface_method->itable_index();
2598
2599 itableMethodEntry* im = ki->first_method_entry(rcvr->klass());
2600 callee = im[mindex].method();
2601 if (callee == NULL) {
2602 CALL_VM(InterpreterRuntime::throw_AbstractMethodErrorVerbose(THREAD, rcvr->klass(), interface_method),
2603 handle_exception);
2604 }
2605
2606 // Profile virtual call.
2607 BI_PROFILE_UPDATE_VIRTUALCALL(rcvr->klass());
2608
2609 istate->set_callee(callee);
2610 istate->set_callee_entry_point(callee->from_interpreted_entry());
2611 #ifdef VM_JVMTI
2612 if (JvmtiExport::can_post_interpreter_events() && THREAD->is_interp_only_mode()) {
2613 istate->set_callee_entry_point(callee->interpreter_entry());
2614 }
2615 #endif /* VM_JVMTI */
2616 istate->set_bcp_advance(5);
2617 UPDATE_PC_AND_RETURN(0); // I'll be back...
2618 }
2619
2620 CASE(_invokevirtual):
2621 CASE(_invokespecial):
2622 CASE(_invokestatic): {
2623 u2 index = Bytes::get_native_u2(pc+1);
|