hotspot/src/share/vm/classfile/systemDictionary.cpp
changeset 36819 bca375d368ed
parent 36381 b9ed6bef9364
child 36822 cdc493d7bc9a
equal deleted inserted replaced
36818:b40330c06dea 36819:bca375d368ed
  2403   }
  2403   }
  2404   THROW_MSG_(vmSymbols::java_lang_LinkageError(), "bad value from MethodHandleNatives", empty);
  2404   THROW_MSG_(vmSymbols::java_lang_LinkageError(), "bad value from MethodHandleNatives", empty);
  2405   return empty;
  2405   return empty;
  2406 }
  2406 }
  2407 
  2407 
  2408 methodHandle SystemDictionary::find_method_handle_invoker(Symbol* name,
  2408 methodHandle SystemDictionary::find_method_handle_invoker(KlassHandle klass,
       
  2409                                                           Symbol* name,
  2409                                                           Symbol* signature,
  2410                                                           Symbol* signature,
  2410                                                           KlassHandle accessing_klass,
  2411                                                           KlassHandle accessing_klass,
  2411                                                           Handle *appendix_result,
  2412                                                           Handle *appendix_result,
  2412                                                           Handle *method_type_result,
  2413                                                           Handle *method_type_result,
  2413                                                           TRAPS) {
  2414                                                           TRAPS) {
  2414   methodHandle empty;
  2415   methodHandle empty;
  2415   assert(THREAD->can_call_java() ,"");
  2416   assert(THREAD->can_call_java() ,"");
  2416   Handle method_type =
  2417   Handle method_type =
  2417     SystemDictionary::find_method_handle_type(signature, accessing_klass, CHECK_(empty));
  2418     SystemDictionary::find_method_handle_type(signature, accessing_klass, CHECK_(empty));
  2418 
  2419 
  2419   KlassHandle  mh_klass = SystemDictionary::MethodHandle_klass();
       
  2420   int ref_kind = JVM_REF_invokeVirtual;
  2420   int ref_kind = JVM_REF_invokeVirtual;
  2421   Handle name_str = StringTable::intern(name, CHECK_(empty));
  2421   Handle name_str = StringTable::intern(name, CHECK_(empty));
  2422   objArrayHandle appendix_box = oopFactory::new_objArray(SystemDictionary::Object_klass(), 1, CHECK_(empty));
  2422   objArrayHandle appendix_box = oopFactory::new_objArray(SystemDictionary::Object_klass(), 1, CHECK_(empty));
  2423   assert(appendix_box->obj_at(0) == NULL, "");
  2423   assert(appendix_box->obj_at(0) == NULL, "");
  2424 
  2424 
  2429 
  2429 
  2430   // call java.lang.invoke.MethodHandleNatives::linkMethod(... String, MethodType) -> MemberName
  2430   // call java.lang.invoke.MethodHandleNatives::linkMethod(... String, MethodType) -> MemberName
  2431   JavaCallArguments args;
  2431   JavaCallArguments args;
  2432   args.push_oop(accessing_klass()->java_mirror());
  2432   args.push_oop(accessing_klass()->java_mirror());
  2433   args.push_int(ref_kind);
  2433   args.push_int(ref_kind);
  2434   args.push_oop(mh_klass()->java_mirror());
  2434   args.push_oop(klass()->java_mirror());
  2435   args.push_oop(name_str());
  2435   args.push_oop(name_str());
  2436   args.push_oop(method_type());
  2436   args.push_oop(method_type());
  2437   args.push_oop(appendix_box());
  2437   args.push_oop(appendix_box());
  2438   JavaValue result(T_OBJECT);
  2438   JavaValue result(T_OBJECT);
  2439   JavaCalls::call_static(&result,
  2439   JavaCalls::call_static(&result,