2587 int i; |
2587 int i; |
2588 for ( i = 0 ; i < int2->itable_length() ; i++, ki++ ) { |
2588 for ( i = 0 ; i < int2->itable_length() ; i++, ki++ ) { |
2589 if (ki->interface_klass() == iclass) break; |
2589 if (ki->interface_klass() == iclass) break; |
2590 } |
2590 } |
2591 // If the interface isn't found, this class doesn't implement this |
2591 // If the interface isn't found, this class doesn't implement this |
2592 // interface. The link resolver checks this but only for the first |
2592 // interface. The link resolver checks this but only for the first |
2593 // time this interface is called. |
2593 // time this interface is called. |
2594 if (i == int2->itable_length()) { |
2594 if (i == int2->itable_length()) { |
2595 VM_JAVA_ERROR(vmSymbols::java_lang_IncompatibleClassChangeError(), "", note_no_trap); |
2595 CALL_VM(InterpreterRuntime::throw_IncompatibleClassChangeErrorVerbose(THREAD, rcvr->klass(), iclass), |
|
2596 handle_exception); |
2596 } |
2597 } |
2597 int mindex = interface_method->itable_index(); |
2598 int mindex = interface_method->itable_index(); |
2598 |
2599 |
2599 itableMethodEntry* im = ki->first_method_entry(rcvr->klass()); |
2600 itableMethodEntry* im = ki->first_method_entry(rcvr->klass()); |
2600 callee = im[mindex].method(); |
2601 callee = im[mindex].method(); |
2601 if (callee == NULL) { |
2602 if (callee == NULL) { |
2602 VM_JAVA_ERROR(vmSymbols::java_lang_AbstractMethodError(), "", note_no_trap); |
2603 CALL_VM(InterpreterRuntime::throw_AbstractMethodErrorVerbose(THREAD, rcvr->klass(), interface_method), |
|
2604 handle_exception); |
2603 } |
2605 } |
2604 |
2606 |
2605 // Profile virtual call. |
2607 // Profile virtual call. |
2606 BI_PROFILE_UPDATE_VIRTUALCALL(rcvr->klass()); |
2608 BI_PROFILE_UPDATE_VIRTUALCALL(rcvr->klass()); |
2607 |
2609 |