< prev index next >

src/hotspot/share/jvmci/jvmciCompilerToVM.cpp

Print this page
rev 52749 : Bootstrap method consolidation
* clean up and simplify JDK support code for BSM invocation
* simplify JVM bootstrap handshake: use BootstrapCallInfo only
* remove unused JVM paths and data fields
* move bootstrap argument processing from MethodHandleNatives to ConstantPool
* remove ConstantGroup; merge argument access into BootstrapCallInfo
* adjust BSM argument access: remove copyArguments, add argumentRef API
* add metadata-free BSM modes, including symbolic arguments from CP


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());


< prev index next >