comparison src/share/vm/prims/methodHandles.cpp @ 6271:93c71eb28866

7188911: nightly failures after JSR 292 lazy method handle update (round 2) Reviewed-by: kvn, jrose
author twisti
date Tue, 07 Aug 2012 14:32:08 -0700
parents 1d7922586cf6
children da91efe96a93
comparison
equal deleted inserted replaced
6270:b72784e722ff 6271:93c71eb28866
1194 } 1194 }
1195 java_lang_invoke_CallSite::set_target_volatile(call_site(), target()); 1195 java_lang_invoke_CallSite::set_target_volatile(call_site(), target());
1196 } 1196 }
1197 JVM_END 1197 JVM_END
1198 1198
1199 JVM_ENTRY(jobject, MH_invoke_UOE(JNIEnv *env, jobject igmh, jobjectArray igargs)) {
1200 TempNewSymbol UOE_name = SymbolTable::new_symbol("java/lang/UnsupportedOperationException", CHECK_NULL);
1201 THROW_MSG_NULL(UOE_name, "MethodHandle.invoke cannot be invoked reflectively");
1202 return NULL;
1203 }
1204 JVM_END
1205
1206 JVM_ENTRY(jobject, MH_invokeExact_UOE(JNIEnv *env, jobject igmh, jobjectArray igargs)) {
1207 TempNewSymbol UOE_name = SymbolTable::new_symbol("java/lang/UnsupportedOperationException", CHECK_NULL);
1208 THROW_MSG_NULL(UOE_name, "MethodHandle.invokeExact cannot be invoked reflectively");
1209 return NULL;
1210 }
1211 JVM_END
1212
1213
1214 /// JVM_RegisterMethodHandleMethods 1199 /// JVM_RegisterMethodHandleMethods
1215 1200
1216 #undef CS // Solaris builds complain 1201 #undef CS // Solaris builds complain
1217 1202
1218 #define LANG "Ljava/lang/" 1203 #define LANG "Ljava/lang/"
1246 {CC"staticFieldOffset", CC"("MEM")J", FN_PTR(MHN_staticFieldOffset)}, 1231 {CC"staticFieldOffset", CC"("MEM")J", FN_PTR(MHN_staticFieldOffset)},
1247 {CC"staticFieldBase", CC"("MEM")"OBJ, FN_PTR(MHN_staticFieldBase)}, 1232 {CC"staticFieldBase", CC"("MEM")"OBJ, FN_PTR(MHN_staticFieldBase)},
1248 {CC"getMemberVMInfo", CC"("MEM")"OBJ, FN_PTR(MHN_getMemberVMInfo)} 1233 {CC"getMemberVMInfo", CC"("MEM")"OBJ, FN_PTR(MHN_getMemberVMInfo)}
1249 }; 1234 };
1250 1235
1251 static JNINativeMethod invoke_methods[] = {
1252 {CC"invoke", CC"(["OBJ")"OBJ, FN_PTR(MH_invoke_UOE)},
1253 {CC"invokeExact", CC"(["OBJ")"OBJ, FN_PTR(MH_invokeExact_UOE)}
1254 };
1255
1256 // This one function is exported, used by NativeLookup. 1236 // This one function is exported, used by NativeLookup.
1257 1237
1258 JVM_ENTRY(void, JVM_RegisterMethodHandleMethods(JNIEnv *env, jclass MHN_class)) { 1238 JVM_ENTRY(void, JVM_RegisterMethodHandleMethods(JNIEnv *env, jclass MHN_class)) {
1259 if (!EnableInvokeDynamic) { 1239 if (!EnableInvokeDynamic) {
1260 warning("JSR 292 is disabled in this JVM. Use -XX:+UnlockDiagnosticVMOptions -XX:+EnableInvokeDynamic to enable."); 1240 warning("JSR 292 is disabled in this JVM. Use -XX:+UnlockDiagnosticVMOptions -XX:+EnableInvokeDynamic to enable.");
1276 1256
1277 if (enable_MH) { 1257 if (enable_MH) {
1278 ThreadToNativeFromVM ttnfv(thread); 1258 ThreadToNativeFromVM ttnfv(thread);
1279 1259
1280 status = env->RegisterNatives(MHN_class, required_methods_JDK8, sizeof(required_methods_JDK8)/sizeof(JNINativeMethod)); 1260 status = env->RegisterNatives(MHN_class, required_methods_JDK8, sizeof(required_methods_JDK8)/sizeof(JNINativeMethod));
1281 if (status == JNI_OK && !env->ExceptionOccurred()) {
1282 status = env->RegisterNatives(MH_class, invoke_methods, sizeof(invoke_methods)/sizeof(JNINativeMethod));
1283 }
1284 if (status != JNI_OK || env->ExceptionOccurred()) { 1261 if (status != JNI_OK || env->ExceptionOccurred()) {
1285 warning("JSR 292 method handle code is mismatched to this JVM. Disabling support."); 1262 warning("JSR 292 method handle code is mismatched to this JVM. Disabling support.");
1286 enable_MH = false; 1263 enable_MH = false;
1287 env->ExceptionClear(); 1264 env->ExceptionClear();
1288 } 1265 }