equal
deleted
inserted
replaced
798 methodHandle m; |
798 methodHandle m; |
799 // Only do exact lookup if receiver klass has been linked. Otherwise, |
799 // Only do exact lookup if receiver klass has been linked. Otherwise, |
800 // the vtable has not been setup, and the LinkResolver will fail. |
800 // the vtable has not been setup, and the LinkResolver will fail. |
801 if (recv->is_array_klass() |
801 if (recv->is_array_klass() |
802 || |
802 || |
803 InstanceKlass::cast(recv)->is_linked() && !exact_receiver->is_interface()) { |
803 (InstanceKlass::cast(recv)->is_linked() && !exact_receiver->is_interface())) { |
804 if (holder()->is_interface()) { |
804 if (holder()->is_interface()) { |
805 m = LinkResolver::resolve_interface_call_or_null(recv, link_info); |
805 m = LinkResolver::resolve_interface_call_or_null(recv, link_info); |
806 } else { |
806 } else { |
807 m = LinkResolver::resolve_virtual_call_or_null(recv, link_info); |
807 m = LinkResolver::resolve_virtual_call_or_null(recv, link_info); |
808 } |
808 } |
1491 } |
1491 } |
1492 rbase = 1; // skip receiver |
1492 rbase = 1; // skip receiver |
1493 } |
1493 } |
1494 break; |
1494 break; |
1495 } |
1495 } |
|
1496 default: |
|
1497 break; |
1496 } |
1498 } |
1497 assert(target_sig->count() - rbase == linker_sig->count() - sbase - has_appendix, "argument count mismatch"); |
1499 assert(target_sig->count() - rbase == linker_sig->count() - sbase - has_appendix, "argument count mismatch"); |
1498 int arg_count = target_sig->count() - rbase; |
1500 int arg_count = target_sig->count() - rbase; |
1499 for (int i = 0; i < arg_count; i++) { |
1501 for (int i = 0; i < arg_count; i++) { |
1500 if (!basic_types_match(linker_sig->type_at(sbase + i), target_sig->type_at(rbase + i))) { |
1502 if (!basic_types_match(linker_sig->type_at(sbase + i), target_sig->type_at(rbase + i))) { |