src/share/vm/prims/methodHandles.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot-comp Sdiff src/share/vm/prims

src/share/vm/prims/methodHandles.cpp

Print this page
rev 5403 : 8023004: JSR 292: java.lang.RuntimeException: Original target method was called.
Reviewed-by: ?
Contributed-by: sspitsyn, vlivanov


1155   oop clazz = java_lang_invoke_MemberName::clazz(JNIHandles::resolve_non_null(mname_jh));
1156   return JNIHandles::make_local(THREAD, clazz);
1157 }
1158 JVM_END
1159 
1160 JVM_ENTRY(jobject, MHN_getMemberVMInfo(JNIEnv *env, jobject igcls, jobject mname_jh)) {
1161   if (mname_jh == NULL)  return NULL;
1162   Handle mname(THREAD, JNIHandles::resolve_non_null(mname_jh));
1163   intptr_t vmindex  = java_lang_invoke_MemberName::vmindex(mname());
1164   Metadata* vmtarget = java_lang_invoke_MemberName::vmtarget(mname());
1165   objArrayHandle result = oopFactory::new_objArray(SystemDictionary::Object_klass(), 2, CHECK_NULL);
1166   jvalue vmindex_value; vmindex_value.j = (long)vmindex;
1167   oop x = java_lang_boxing_object::create(T_LONG, &vmindex_value, CHECK_NULL);
1168   result->obj_at_put(0, x);
1169   x = NULL;
1170   if (vmtarget == NULL) {
1171     x = NULL;
1172   } else if (vmtarget->is_klass()) {
1173     x = ((Klass*) vmtarget)->java_mirror();
1174   } else if (vmtarget->is_method()) {
1175     Handle mname2 = MethodHandles::new_MemberName(CHECK_NULL);
1176     CallInfo info((Method*)vmtarget);




1177     x = MethodHandles::init_method_MemberName(mname2, info);
1178   }

1179   result->obj_at_put(1, x);
1180   return JNIHandles::make_local(env, result());
1181 }
1182 JVM_END
1183 
1184 
1185 
1186 //  static native int getMembers(Class<?> defc, String matchName, String matchSig,
1187 //          int matchFlags, Class<?> caller, int skip, MemberName[] results);
1188 JVM_ENTRY(jint, MHN_getMembers(JNIEnv *env, jobject igcls,
1189                                jclass clazz_jh, jstring name_jh, jstring sig_jh,
1190                                int mflags, jclass caller_jh, jint skip, jobjectArray results_jh)) {
1191   if (clazz_jh == NULL || results_jh == NULL)  return -1;
1192   KlassHandle k(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz_jh)));
1193 
1194   objArrayHandle results(THREAD, (objArrayOop) JNIHandles::resolve(results_jh));
1195   if (results.is_null() || !results->is_objArray())  return -1;
1196 
1197   TempNewSymbol name = NULL;
1198   TempNewSymbol sig = NULL;




1155   oop clazz = java_lang_invoke_MemberName::clazz(JNIHandles::resolve_non_null(mname_jh));
1156   return JNIHandles::make_local(THREAD, clazz);
1157 }
1158 JVM_END
1159 
1160 JVM_ENTRY(jobject, MHN_getMemberVMInfo(JNIEnv *env, jobject igcls, jobject mname_jh)) {
1161   if (mname_jh == NULL)  return NULL;
1162   Handle mname(THREAD, JNIHandles::resolve_non_null(mname_jh));
1163   intptr_t vmindex  = java_lang_invoke_MemberName::vmindex(mname());
1164   Metadata* vmtarget = java_lang_invoke_MemberName::vmtarget(mname());
1165   objArrayHandle result = oopFactory::new_objArray(SystemDictionary::Object_klass(), 2, CHECK_NULL);
1166   jvalue vmindex_value; vmindex_value.j = (long)vmindex;
1167   oop x = java_lang_boxing_object::create(T_LONG, &vmindex_value, CHECK_NULL);
1168   result->obj_at_put(0, x);
1169   x = NULL;
1170   if (vmtarget == NULL) {
1171     x = NULL;
1172   } else if (vmtarget->is_klass()) {
1173     x = ((Klass*) vmtarget)->java_mirror();
1174   } else if (vmtarget->is_method()) {

1175     CallInfo info((Method*)vmtarget);
1176     methodHandle m = info.resolved_method();
1177     x = m->method_holder()->get_member_name(m->method_idnum());
1178     if (x == NULL) {
1179       Handle mname2 = MethodHandles::new_MemberName(CHECK_NULL);
1180       x = MethodHandles::init_method_MemberName(mname2, info);
1181     }
1182   }
1183   result->obj_at_put(1, x);
1184   return JNIHandles::make_local(env, result());
1185 }
1186 JVM_END
1187 
1188 
1189 
1190 //  static native int getMembers(Class<?> defc, String matchName, String matchSig,
1191 //          int matchFlags, Class<?> caller, int skip, MemberName[] results);
1192 JVM_ENTRY(jint, MHN_getMembers(JNIEnv *env, jobject igcls,
1193                                jclass clazz_jh, jstring name_jh, jstring sig_jh,
1194                                int mflags, jclass caller_jh, jint skip, jobjectArray results_jh)) {
1195   if (clazz_jh == NULL || results_jh == NULL)  return -1;
1196   KlassHandle k(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz_jh)));
1197 
1198   objArrayHandle results(THREAD, (objArrayOop) JNIHandles::resolve(results_jh));
1199   if (results.is_null() || !results->is_objArray())  return -1;
1200 
1201   TempNewSymbol name = NULL;
1202   TempNewSymbol sig = NULL;


src/share/vm/prims/methodHandles.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File