Print this page


Split Close
Expand all
Collapse all
          --- old/src/share/vm/prims/methodHandles.cpp
          +++ new/src/share/vm/prims/methodHandles.cpp
↓ open down ↓ 1186 lines elided ↑ open up ↑
1187 1187    Handle target   (THREAD, JNIHandles::resolve(target_jh));
1188 1188    {
1189 1189      // Walk all nmethods depending on this call site.
1190 1190      MutexLocker mu(Compile_lock, thread);
1191 1191      Universe::flush_dependents_on(call_site, target);
1192 1192    }
1193 1193    java_lang_invoke_CallSite::set_target_volatile(call_site(), target());
1194 1194  }
1195 1195  JVM_END
1196 1196  
1197      -JVM_ENTRY(jobject, MH_invoke_UOE(JNIEnv *env, jobject igmh, jobjectArray igargs)) {
1198      -    TempNewSymbol UOE_name = SymbolTable::new_symbol("java/lang/UnsupportedOperationException", CHECK_NULL);
1199      -    THROW_MSG_NULL(UOE_name, "MethodHandle.invoke cannot be invoked reflectively");
1200      -    return NULL;
1201      -}
1202      -JVM_END
1203      -
1204      -JVM_ENTRY(jobject, MH_invokeExact_UOE(JNIEnv *env, jobject igmh, jobjectArray igargs)) {
1205      -    TempNewSymbol UOE_name = SymbolTable::new_symbol("java/lang/UnsupportedOperationException", CHECK_NULL);
1206      -    THROW_MSG_NULL(UOE_name, "MethodHandle.invokeExact cannot be invoked reflectively");
1207      -    return NULL;
1208      -}
1209      -JVM_END
1210      -
1211 1197  /// JVM_RegisterMethodHandleMethods
1212 1198  
1213 1199  #undef CS  // Solaris builds complain
1214 1200  
1215 1201  #define LANG "Ljava/lang/"
1216 1202  #define JLINV "Ljava/lang/invoke/"
1217 1203  
1218 1204  #define OBJ   LANG"Object;"
1219 1205  #define CLS   LANG"Class;"
1220 1206  #define STRG  LANG"String;"
↓ open down ↓ 17 lines elided ↑ open up ↑
1238 1224    //          int matchFlags, Class<?> caller, int skip, MemberName[] results);
1239 1225    {CC"getMembers",                CC"("CLS""STRG""STRG"I"CLS"I["MEM")I", FN_PTR(MHN_getMembers)},
1240 1226    {CC"objectFieldOffset",         CC"("MEM")J",                          FN_PTR(MHN_objectFieldOffset)},
1241 1227    {CC"setCallSiteTargetNormal",   CC"("CS""MH")V",                       FN_PTR(MHN_setCallSiteTargetNormal)},
1242 1228    {CC"setCallSiteTargetVolatile", CC"("CS""MH")V",                       FN_PTR(MHN_setCallSiteTargetVolatile)},
1243 1229    {CC"staticFieldOffset",         CC"("MEM")J",                          FN_PTR(MHN_staticFieldOffset)},
1244 1230    {CC"staticFieldBase",           CC"("MEM")"OBJ,                        FN_PTR(MHN_staticFieldBase)},
1245 1231    {CC"getMemberVMInfo",           CC"("MEM")"OBJ,                        FN_PTR(MHN_getMemberVMInfo)}
1246 1232  };
1247 1233  
1248      -static JNINativeMethod invoke_methods[] = {
1249      -  {CC"invoke",                    CC"(["OBJ")"OBJ,                       FN_PTR(MH_invoke_UOE)},
1250      -  {CC"invokeExact",               CC"(["OBJ")"OBJ,                       FN_PTR(MH_invokeExact_UOE)}
1251      -};
1252      -
1253 1234  // This one function is exported, used by NativeLookup.
1254 1235  
1255 1236  JVM_ENTRY(void, JVM_RegisterMethodHandleMethods(JNIEnv *env, jclass MHN_class)) {
1256 1237    if (!EnableInvokeDynamic) {
1257 1238      warning("JSR 292 is disabled in this JVM.  Use -XX:+UnlockDiagnosticVMOptions -XX:+EnableInvokeDynamic to enable.");
1258 1239      return;  // bind nothing
1259 1240    }
1260 1241  
1261 1242    assert(!MethodHandles::enabled(), "must not be enabled");
1262 1243    bool enable_MH = true;
↓ open down ↓ 5 lines elided ↑ open up ↑
1268 1249      oop mirror = Klass::cast(SystemDictionary::MethodHandle_klass())->java_mirror();
1269 1250      MH_class = (jclass) JNIHandles::make_local(env, mirror);
1270 1251    }
1271 1252  
1272 1253    int status;
1273 1254  
1274 1255    if (enable_MH) {
1275 1256      ThreadToNativeFromVM ttnfv(thread);
1276 1257  
1277 1258      status = env->RegisterNatives(MHN_class, required_methods_JDK8, sizeof(required_methods_JDK8)/sizeof(JNINativeMethod));
1278      -    if (status == JNI_OK && !env->ExceptionOccurred()) {
1279      -      status = env->RegisterNatives(MH_class, invoke_methods, sizeof(invoke_methods)/sizeof(JNINativeMethod));
1280      -    }
1281 1259      if (status != JNI_OK || env->ExceptionOccurred()) {
1282 1260        warning("JSR 292 method handle code is mismatched to this JVM.  Disabling support.");
1283 1261        enable_MH = false;
1284 1262        env->ExceptionClear();
1285 1263      }
1286 1264    }
1287 1265  
1288 1266    if (TraceInvokeDynamic) {
1289 1267      tty->print_cr("MethodHandle support loaded (using LambdaForms)");
1290 1268    }
1291 1269  
1292 1270    if (enable_MH) {
1293 1271      MethodHandles::generate_adapters();
1294 1272      MethodHandles::set_enabled(true);
1295 1273    }
1296 1274  }
1297 1275  JVM_END
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX