hotspot/src/share/vm/prims/methodHandles.cpp
changeset 46327 91576389a517
parent 43929 9a572e758c9b
parent 46289 1904e7ec236e
child 46329 53ccc37bda19
equal deleted inserted replaced
44203:d2d435372329 46327:91576389a517
   825         InstanceKlass* defc = m->method_holder();
   825         InstanceKlass* defc = m->method_holder();
   826         java_lang_invoke_MemberName::set_clazz(mname(), defc->java_mirror());
   826         java_lang_invoke_MemberName::set_clazz(mname(), defc->java_mirror());
   827       }
   827       }
   828       if (!have_name) {
   828       if (!have_name) {
   829         //not java_lang_String::create_from_symbol; let's intern member names
   829         //not java_lang_String::create_from_symbol; let's intern member names
   830         Handle name = StringTable::intern(m->name(), CHECK);
   830         oop name = StringTable::intern(m->name(), CHECK);
   831         java_lang_invoke_MemberName::set_name(mname(), name());
   831         java_lang_invoke_MemberName::set_name(mname(), name);
   832       }
   832       }
   833       if (!have_type) {
   833       if (!have_type) {
   834         Handle type = java_lang_String::create_from_symbol(m->signature(), CHECK);
   834         Handle type = java_lang_String::create_from_symbol(m->signature(), CHECK);
   835         java_lang_invoke_MemberName::set_type(mname(), type());
   835         java_lang_invoke_MemberName::set_type(mname(), type());
   836       }
   836       }
   849       if (!have_defc) {
   849       if (!have_defc) {
   850         java_lang_invoke_MemberName::set_clazz(mname(), defc->java_mirror());
   850         java_lang_invoke_MemberName::set_clazz(mname(), defc->java_mirror());
   851       }
   851       }
   852       if (!have_name) {
   852       if (!have_name) {
   853         //not java_lang_String::create_from_symbol; let's intern member names
   853         //not java_lang_String::create_from_symbol; let's intern member names
   854         Handle name = StringTable::intern(fd.name(), CHECK);
   854         oop name = StringTable::intern(fd.name(), CHECK);
   855         java_lang_invoke_MemberName::set_name(mname(), name());
   855         java_lang_invoke_MemberName::set_name(mname(), name);
   856       }
   856       }
   857       if (!have_type) {
   857       if (!have_type) {
   858         // If it is a primitive field type, don't mess with short strings like "I".
   858         // If it is a primitive field type, don't mess with short strings like "I".
   859         Handle type = field_signature_type_or_null(fd.signature());
   859         Handle type (THREAD, field_signature_type_or_null(fd.signature()));
   860         if (type.is_null()) {
   860         if (type.is_null()) {
   861           java_lang_String::create_from_symbol(fd.signature(), CHECK);
   861           type = java_lang_String::create_from_symbol(fd.signature(), CHECK);
   862         }
   862         }
   863         java_lang_invoke_MemberName::set_type(mname(), type());
   863         java_lang_invoke_MemberName::set_type(mname(), type());
   864       }
   864       }
   865       return;
   865       return;
   866     }
   866     }
  1013 
  1013 
  1014 void MethodHandles::flush_dependent_nmethods(Handle call_site, Handle target) {
  1014 void MethodHandles::flush_dependent_nmethods(Handle call_site, Handle target) {
  1015   assert_lock_strong(Compile_lock);
  1015   assert_lock_strong(Compile_lock);
  1016 
  1016 
  1017   int marked = 0;
  1017   int marked = 0;
  1018   CallSiteDepChange changes(call_site(), target());
  1018   CallSiteDepChange changes(call_site, target);
  1019   {
  1019   {
  1020     NoSafepointVerifier nsv;
  1020     NoSafepointVerifier nsv;
  1021     MutexLockerEx mu2(CodeCache_lock, Mutex::_no_safepoint_check_flag);
  1021     MutexLockerEx mu2(CodeCache_lock, Mutex::_no_safepoint_check_flag);
  1022 
  1022 
  1023     oop context = java_lang_invoke_CallSite::context(call_site());
  1023     oop context = java_lang_invoke_CallSite::context(call_site());
  1229     if (reference_klass != NULL && reference_klass->is_instance_klass()) {
  1229     if (reference_klass != NULL && reference_klass->is_instance_klass()) {
  1230       // Emulate LinkResolver::check_klass_accessability.
  1230       // Emulate LinkResolver::check_klass_accessability.
  1231       Klass* caller = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(caller_jh));
  1231       Klass* caller = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(caller_jh));
  1232       if (caller != SystemDictionary::Object_klass()
  1232       if (caller != SystemDictionary::Object_klass()
  1233           && Reflection::verify_class_access(caller,
  1233           && Reflection::verify_class_access(caller,
  1234                                              reference_klass,
  1234                                              InstanceKlass::cast(reference_klass),
  1235                                              true) != Reflection::ACCESS_OK) {
  1235                                              true) != Reflection::ACCESS_OK) {
  1236         THROW_MSG_NULL(vmSymbols::java_lang_InternalError(), reference_klass->external_name());
  1236         THROW_MSG_NULL(vmSymbols::java_lang_InternalError(), reference_klass->external_name());
  1237       }
  1237       }
  1238     }
  1238     }
  1239   }
  1239   }
  1303 JVM_ENTRY(jobject, MHN_getMemberVMInfo(JNIEnv *env, jobject igcls, jobject mname_jh)) {
  1303 JVM_ENTRY(jobject, MHN_getMemberVMInfo(JNIEnv *env, jobject igcls, jobject mname_jh)) {
  1304   if (mname_jh == NULL)  return NULL;
  1304   if (mname_jh == NULL)  return NULL;
  1305   Handle mname(THREAD, JNIHandles::resolve_non_null(mname_jh));
  1305   Handle mname(THREAD, JNIHandles::resolve_non_null(mname_jh));
  1306   intptr_t vmindex  = java_lang_invoke_MemberName::vmindex(mname());
  1306   intptr_t vmindex  = java_lang_invoke_MemberName::vmindex(mname());
  1307   Metadata* vmtarget = java_lang_invoke_MemberName::vmtarget(mname());
  1307   Metadata* vmtarget = java_lang_invoke_MemberName::vmtarget(mname());
  1308   objArrayHandle result = oopFactory::new_objArray(SystemDictionary::Object_klass(), 2, CHECK_NULL);
  1308   objArrayHandle result = oopFactory::new_objArray_handle(SystemDictionary::Object_klass(), 2, CHECK_NULL);
  1309   jvalue vmindex_value; vmindex_value.j = (long)vmindex;
  1309   jvalue vmindex_value; vmindex_value.j = (long)vmindex;
  1310   oop x = java_lang_boxing_object::create(T_LONG, &vmindex_value, CHECK_NULL);
  1310   oop x = java_lang_boxing_object::create(T_LONG, &vmindex_value, CHECK_NULL);
  1311   result->obj_at_put(0, x);
  1311   result->obj_at_put(0, x);
  1312   x = NULL;
  1312   x = NULL;
  1313   if (vmtarget == NULL) {
  1313   if (vmtarget == NULL) {