hotspot/src/share/vm/prims/methodHandles.cpp
changeset 31019 d05fcdd70109
parent 30615 4713e7c7b96f
child 31050 f5945a55e395
equal deleted inserted replaced
30886:d2a0ec86d6ef 31019:d05fcdd70109
   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));