675 // Time to do the lookup. |
675 // Time to do the lookup. |
676 switch (flags & ALL_KINDS) { |
676 switch (flags & ALL_KINDS) { |
677 case IS_METHOD: |
677 case IS_METHOD: |
678 { |
678 { |
679 CallInfo result; |
679 CallInfo result; |
|
680 LinkInfo link_info(defc, name, type, caller, caller.not_null()); |
680 { |
681 { |
681 assert(!HAS_PENDING_EXCEPTION, ""); |
682 assert(!HAS_PENDING_EXCEPTION, ""); |
682 if (ref_kind == JVM_REF_invokeStatic) { |
683 if (ref_kind == JVM_REF_invokeStatic) { |
683 LinkResolver::resolve_static_call(result, |
684 LinkResolver::resolve_static_call(result, |
684 defc, name, type, caller, caller.not_null(), false, THREAD); |
685 link_info, false, THREAD); |
685 } else if (ref_kind == JVM_REF_invokeInterface) { |
686 } else if (ref_kind == JVM_REF_invokeInterface) { |
686 LinkResolver::resolve_interface_call(result, Handle(), defc, |
687 LinkResolver::resolve_interface_call(result, Handle(), defc, |
687 defc, name, type, caller, caller.not_null(), false, THREAD); |
688 link_info, false, THREAD); |
688 } else if (mh_invoke_id != vmIntrinsics::_none) { |
689 } else if (mh_invoke_id != vmIntrinsics::_none) { |
689 assert(!is_signature_polymorphic_static(mh_invoke_id), ""); |
690 assert(!is_signature_polymorphic_static(mh_invoke_id), ""); |
690 LinkResolver::resolve_handle_call(result, |
691 LinkResolver::resolve_handle_call(result, link_info, THREAD); |
691 defc, name, type, caller, THREAD); |
|
692 } else if (ref_kind == JVM_REF_invokeSpecial) { |
692 } else if (ref_kind == JVM_REF_invokeSpecial) { |
693 LinkResolver::resolve_special_call(result, |
693 LinkResolver::resolve_special_call(result, |
694 defc, name, type, caller, caller.not_null(), THREAD); |
694 link_info, THREAD); |
695 } else if (ref_kind == JVM_REF_invokeVirtual) { |
695 } else if (ref_kind == JVM_REF_invokeVirtual) { |
696 LinkResolver::resolve_virtual_call(result, Handle(), defc, |
696 LinkResolver::resolve_virtual_call(result, Handle(), defc, |
697 defc, name, type, caller, caller.not_null(), false, THREAD); |
697 link_info, false, THREAD); |
698 } else { |
698 } else { |
699 assert(false, err_msg("ref_kind=%d", ref_kind)); |
699 assert(false, err_msg("ref_kind=%d", ref_kind)); |
700 } |
700 } |
701 if (HAS_PENDING_EXCEPTION) { |
701 if (HAS_PENDING_EXCEPTION) { |
702 return empty; |
702 return empty; |
712 return Handle(THREAD, mname2); |
712 return Handle(THREAD, mname2); |
713 } |
713 } |
714 case IS_CONSTRUCTOR: |
714 case IS_CONSTRUCTOR: |
715 { |
715 { |
716 CallInfo result; |
716 CallInfo result; |
|
717 LinkInfo link_info(defc, name, type, caller, caller.not_null()); |
717 { |
718 { |
718 assert(!HAS_PENDING_EXCEPTION, ""); |
719 assert(!HAS_PENDING_EXCEPTION, ""); |
719 if (name == vmSymbols::object_initializer_name()) { |
720 if (name == vmSymbols::object_initializer_name()) { |
720 LinkResolver::resolve_special_call(result, |
721 LinkResolver::resolve_special_call(result, link_info, THREAD); |
721 defc, name, type, caller, caller.not_null(), THREAD); |
|
722 } else { |
722 } else { |
723 break; // will throw after end of switch |
723 break; // will throw after end of switch |
724 } |
724 } |
725 if (HAS_PENDING_EXCEPTION) { |
725 if (HAS_PENDING_EXCEPTION) { |
726 return empty; |
726 return empty; |
733 case IS_FIELD: |
733 case IS_FIELD: |
734 { |
734 { |
735 fieldDescriptor result; // find_field initializes fd if found |
735 fieldDescriptor result; // find_field initializes fd if found |
736 { |
736 { |
737 assert(!HAS_PENDING_EXCEPTION, ""); |
737 assert(!HAS_PENDING_EXCEPTION, ""); |
738 LinkResolver::resolve_field(result, defc, name, type, caller, Bytecodes::_nop, false, false, THREAD); |
738 LinkInfo link_info(defc, name, type, caller, /*check_access*/false); |
|
739 LinkResolver::resolve_field(result, link_info, Bytecodes::_nop, false, THREAD); |
739 if (HAS_PENDING_EXCEPTION) { |
740 if (HAS_PENDING_EXCEPTION) { |
740 return empty; |
741 return empty; |
741 } |
742 } |
742 } |
743 } |
743 oop mname2 = init_field_MemberName(mname, result, ref_kind_is_setter(ref_kind)); |
744 oop mname2 = init_field_MemberName(mname, result, ref_kind_is_setter(ref_kind)); |