< prev index next >

src/hotspot/share/prims/methodHandles.cpp

Print this page

        

@@ -177,11 +177,10 @@
 }
 
 oop MethodHandles::init_MemberName(Handle mname, Handle target, TRAPS) {
   // This method is used from java.lang.invoke.MemberName constructors.
   // It fills in the new MemberName from a java.lang.reflect.Member.
-  Thread* thread = Thread::current();
   oop target_oop = target();
   Klass* target_klass = target_oop->klass();
   if (target_klass == SystemDictionary::reflect_Field_klass()) {
     oop clazz = java_lang_reflect_Field::clazz(target_oop); // fd.field_holder()
     int slot  = java_lang_reflect_Field::slot(target_oop);  // fd.index()

@@ -205,27 +204,27 @@
     if (k != NULL && k->is_instance_klass()) {
       Method* m = InstanceKlass::cast(k)->method_with_idnum(slot);
       if (m == NULL || is_signature_polymorphic(m->intrinsic_id()))
         return NULL;            // do not resolve unless there is a concrete signature
       CallInfo info(m, k, CHECK_NULL);
-      return init_method_MemberName(mname, info);
+      return init_method_MemberName(mname, info, THREAD);
     }
   } else if (target_klass == SystemDictionary::reflect_Constructor_klass()) {
     oop clazz  = java_lang_reflect_Constructor::clazz(target_oop);
     int slot   = java_lang_reflect_Constructor::slot(target_oop);
     Klass* k = java_lang_Class::as_Klass(clazz);
     if (k != NULL && k->is_instance_klass()) {
       Method* m = InstanceKlass::cast(k)->method_with_idnum(slot);
       if (m == NULL)  return NULL;
       CallInfo info(m, k, CHECK_NULL);
-      return init_method_MemberName(mname, info);
+      return init_method_MemberName(mname, info, THREAD);
     }
   }
   return NULL;
 }
 
-oop MethodHandles::init_method_MemberName(Handle mname, CallInfo& info) {
+oop MethodHandles::init_method_MemberName(Handle mname, CallInfo& info, TRAPS) {
   assert(info.resolved_appendix().is_null(), "only normal methods here");
   methodHandle m(Thread::current(), info.resolved_method());
   assert(m.not_null(), "null method handle");
   InstanceKlass* m_klass = m->method_holder();
   assert(m_klass != NULL, "null holder for method handle");

@@ -787,11 +786,11 @@
         // since there is no way to bind this value into the MemberName.
         // Caller is responsible to prevent this from happening.
         THROW_MSG_(vmSymbols::java_lang_InternalError(), "appendix", empty);
       }
       result.set_resolved_method_name(CHECK_(empty));
-      oop mname2 = init_method_MemberName(mname, result);
+      oop mname2 = init_method_MemberName(mname, result, THREAD);
       return Handle(THREAD, mname2);
     }
   case IS_CONSTRUCTOR:
     {
       CallInfo result;

@@ -810,11 +809,11 @@
           return empty;
         }
       }
       assert(result.is_statically_bound(), "");
       result.set_resolved_method_name(CHECK_(empty));
-      oop mname2 = init_method_MemberName(mname, result);
+      oop mname2 = init_method_MemberName(mname, result, THREAD);
       return Handle(THREAD, mname2);
     }
   case IS_FIELD:
     {
       fieldDescriptor result; // find_field initializes fd if found

@@ -920,12 +919,10 @@
                                     Symbol* name, Symbol* sig,
                                     int mflags, Klass* caller,
                                     int skip, objArrayHandle results, TRAPS) {
   // %%% take caller into account!
 
-  Thread* thread = Thread::current();
-
   if (k == NULL || !k->is_instance_klass())  return -1;
 
   int rfill = 0, rlimit = results->length(), rskip = skip;
   // overflow measurement:
   int overflow = 0, overflow_limit = MAX2(1000, rlimit);

@@ -958,11 +955,11 @@
         continue;
       // passed the filters
       if (rskip > 0) {
         --rskip;
       } else if (rfill < rlimit) {
-        Handle result(thread, results->obj_at(rfill++));
+        Handle result(THREAD, results->obj_at(rfill++));
         if (!java_lang_invoke_MemberName::is_instance(result()))
           return -99;  // caller bug!
         oop saved = MethodHandles::init_field_MemberName(result, st.field_descriptor());
         if (saved != result())
           results->obj_at_put(rfill-1, saved);  // show saved instance to user

@@ -1009,15 +1006,15 @@
         continue;
       // passed the filters
       if (rskip > 0) {
         --rskip;
       } else if (rfill < rlimit) {
-        Handle result(thread, results->obj_at(rfill++));
+        Handle result(THREAD, results->obj_at(rfill++));
         if (!java_lang_invoke_MemberName::is_instance(result()))
           return -99;  // caller bug!
         CallInfo info(m, NULL, CHECK_0);
-        oop saved = MethodHandles::init_method_MemberName(result, info);
+        oop saved = MethodHandles::init_method_MemberName(result, info, THREAD);
         if (saved != result())
           results->obj_at_put(rfill-1, saved);  // show saved instance to user
       } else if (++overflow >= overflow_limit) {
         match_flags = 0; break; // got tired of looking at overflow
       }

@@ -1300,11 +1297,11 @@
     Method* vmtarget = java_lang_invoke_MemberName::vmtarget(mname());
     assert(vmtarget != NULL && vmtarget->is_method(), "vmtarget is only method");
     x = mname();
   }
   result->obj_at_put(1, x);
-  return JNIHandles::make_local(env, result());
+  return JNIHandles::make_local(THREAD, result());
 }
 JVM_END
 
 
 

@@ -1548,11 +1545,11 @@
 JVM_ENTRY(void, JVM_RegisterMethodHandleMethods(JNIEnv *env, jclass MHN_class)) {
   assert(!MethodHandles::enabled(), "must not be enabled");
   assert(SystemDictionary::MethodHandle_klass() != NULL, "should be present");
 
   oop mirror = SystemDictionary::MethodHandle_klass()->java_mirror();
-  jclass MH_class = (jclass) JNIHandles::make_local(env, mirror);
+  jclass MH_class = (jclass) JNIHandles::make_local(THREAD, mirror);
 
   {
     ThreadToNativeFromVM ttnfv(thread);
 
     int status = env->RegisterNatives(MHN_class, MHN_methods, sizeof(MHN_methods)/sizeof(JNINativeMethod));
< prev index next >