1208
1209 LinkInfo link_info(cp, index, CATCH);
1210
1211 Klass* resolved_klass = link_info.resolved_klass();
1212
1213 Symbol* name_sym = cp->name_ref_at(index);
1214
1215 vmassert(MethodHandles::is_method_handle_invoke_name(resolved_klass, name_sym), "!");
1216 vmassert(MethodHandles::is_signature_polymorphic_name(resolved_klass, name_sym), "!");
1217
1218 methodHandle adapter_method(cp_cache_entry->f1_as_method());
1219
1220 methodHandle resolved_method(adapter_method);
1221
1222 // Can we treat it as a regular invokevirtual?
1223 if (resolved_method->method_holder() == resolved_klass && resolved_method->name() == name_sym) {
1224 vmassert(!resolved_method->is_static(),"!");
1225 vmassert(MethodHandles::is_signature_polymorphic_method(resolved_method()),"!");
1226 vmassert(!MethodHandles::is_signature_polymorphic_static(resolved_method->intrinsic_id()), "!");
1227 vmassert(cp_cache_entry->appendix_if_resolved(cp) == NULL, "!");
1228 vmassert(cp_cache_entry->method_type_if_resolved(cp) == NULL, "!");
1229
1230 methodHandle m(LinkResolver::linktime_resolve_virtual_method_or_null(link_info));
1231 vmassert(m == resolved_method, "!!");
1232 return -1;
1233 }
1234
1235 return Bytecodes::_invokevirtual;
1236 }
1237 if (cp_cache_entry->is_resolved(Bytecodes::_invokedynamic)) {
1238 return Bytecodes::_invokedynamic;
1239 }
1240 return -1;
1241 C2V_END
1242
1243
1244 C2V_VMENTRY(jobject, getSignaturePolymorphicHolders, (JNIEnv*, jobject))
1245 objArrayHandle holders = oopFactory::new_objArray_handle(SystemDictionary::String_klass(), 2, CHECK_NULL);
1246 Handle mh = java_lang_String::create_from_str("Ljava/lang/invoke/MethodHandle;", CHECK_NULL);
1247 Handle vh = java_lang_String::create_from_str("Ljava/lang/invoke/VarHandle;", CHECK_NULL);
1248 holders->obj_at_put(0, mh());
|
1208
1209 LinkInfo link_info(cp, index, CATCH);
1210
1211 Klass* resolved_klass = link_info.resolved_klass();
1212
1213 Symbol* name_sym = cp->name_ref_at(index);
1214
1215 vmassert(MethodHandles::is_method_handle_invoke_name(resolved_klass, name_sym), "!");
1216 vmassert(MethodHandles::is_signature_polymorphic_name(resolved_klass, name_sym), "!");
1217
1218 methodHandle adapter_method(cp_cache_entry->f1_as_method());
1219
1220 methodHandle resolved_method(adapter_method);
1221
1222 // Can we treat it as a regular invokevirtual?
1223 if (resolved_method->method_holder() == resolved_klass && resolved_method->name() == name_sym) {
1224 vmassert(!resolved_method->is_static(),"!");
1225 vmassert(MethodHandles::is_signature_polymorphic_method(resolved_method()),"!");
1226 vmassert(!MethodHandles::is_signature_polymorphic_static(resolved_method->intrinsic_id()), "!");
1227 vmassert(cp_cache_entry->appendix_if_resolved(cp) == NULL, "!");
1228
1229 methodHandle m(LinkResolver::linktime_resolve_virtual_method_or_null(link_info));
1230 vmassert(m == resolved_method, "!!");
1231 return -1;
1232 }
1233
1234 return Bytecodes::_invokevirtual;
1235 }
1236 if (cp_cache_entry->is_resolved(Bytecodes::_invokedynamic)) {
1237 return Bytecodes::_invokedynamic;
1238 }
1239 return -1;
1240 C2V_END
1241
1242
1243 C2V_VMENTRY(jobject, getSignaturePolymorphicHolders, (JNIEnv*, jobject))
1244 objArrayHandle holders = oopFactory::new_objArray_handle(SystemDictionary::String_klass(), 2, CHECK_NULL);
1245 Handle mh = java_lang_String::create_from_str("Ljava/lang/invoke/MethodHandle;", CHECK_NULL);
1246 Handle vh = java_lang_String::create_from_str("Ljava/lang/invoke/VarHandle;", CHECK_NULL);
1247 holders->obj_at_put(0, mh());
|