hotspot/src/share/vm/oops/methodOop.cpp
changeset 9116 9bc44be338d6
parent 8676 9098d4e927e1
child 9134 189a8c094016
equal deleted inserted replaced
9115:5a28312aa393 9116:9bc44be338d6
   850 }
   850 }
   851 
   851 
   852 bool methodOopDesc::is_method_handle_invoke_name(vmSymbols::SID name_sid) {
   852 bool methodOopDesc::is_method_handle_invoke_name(vmSymbols::SID name_sid) {
   853   switch (name_sid) {
   853   switch (name_sid) {
   854   case vmSymbols::VM_SYMBOL_ENUM_NAME(invokeExact_name):
   854   case vmSymbols::VM_SYMBOL_ENUM_NAME(invokeExact_name):
   855   case vmSymbols::VM_SYMBOL_ENUM_NAME(invokeGeneric_name):
   855   case vmSymbols::VM_SYMBOL_ENUM_NAME(invoke_name):
   856     return true;
   856     return true;
   857   }
   857   }
   858   if ((AllowTransitionalJSR292 || AllowInvokeForInvokeGeneric)
   858   if (AllowInvokeGeneric
   859       && name_sid == vmSymbols::VM_SYMBOL_ENUM_NAME(invoke_name))
   859       && name_sid == vmSymbols::VM_SYMBOL_ENUM_NAME(invokeGeneric_name))
   860     return true;
   860     return true;
   861   return false;
   861   return false;
   862 }
   862 }
   863 
   863 
   864 // Constant pool structure for invoke methods:
   864 // Constant pool structure for invoke methods:
  1090   // ditto for method and signature:
  1090   // ditto for method and signature:
  1091   vmSymbols::SID  name_id = vmSymbols::find_sid(name());
  1091   vmSymbols::SID  name_id = vmSymbols::find_sid(name());
  1092   if (name_id == vmSymbols::NO_SID)  return;
  1092   if (name_id == vmSymbols::NO_SID)  return;
  1093   vmSymbols::SID   sig_id = vmSymbols::find_sid(signature());
  1093   vmSymbols::SID   sig_id = vmSymbols::find_sid(signature());
  1094   if (klass_id != vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_MethodHandle)
  1094   if (klass_id != vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_MethodHandle)
  1095       && !(klass_id == vmSymbols::VM_SYMBOL_ENUM_NAME(java_dyn_MethodHandle) && AllowTransitionalJSR292)
       
  1096       && sig_id == vmSymbols::NO_SID)  return;
  1095       && sig_id == vmSymbols::NO_SID)  return;
  1097   jshort flags = access_flags().as_short();
  1096   jshort flags = access_flags().as_short();
  1098 
  1097 
  1099   vmIntrinsics::ID id = vmIntrinsics::find_id(klass_id, name_id, sig_id, flags);
  1098   vmIntrinsics::ID id = vmIntrinsics::find_id(klass_id, name_id, sig_id, flags);
  1100   if (id != vmIntrinsics::_none) {
  1099   if (id != vmIntrinsics::_none) {
  1116       break;
  1115       break;
  1117     }
  1116     }
  1118     break;
  1117     break;
  1119 
  1118 
  1120   // Signature-polymorphic methods: MethodHandle.invoke*, InvokeDynamic.*.
  1119   // Signature-polymorphic methods: MethodHandle.invoke*, InvokeDynamic.*.
  1121   case vmSymbols::VM_SYMBOL_ENUM_NAME(java_dyn_MethodHandle):  // AllowTransitionalJSR292 ONLY
       
  1122   case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_MethodHandle):
  1120   case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_MethodHandle):
  1123     if (is_static() || !is_native())  break;
  1121     if (is_static() || !is_native())  break;
  1124     switch (name_id) {
  1122     switch (name_id) {
  1125     case vmSymbols::VM_SYMBOL_ENUM_NAME(invokeGeneric_name):
  1123     case vmSymbols::VM_SYMBOL_ENUM_NAME(invokeGeneric_name):
       
  1124       if (!AllowInvokeGeneric)  break;
       
  1125     case vmSymbols::VM_SYMBOL_ENUM_NAME(invoke_name):
  1126       id = vmIntrinsics::_invokeGeneric;
  1126       id = vmIntrinsics::_invokeGeneric;
  1127       break;
  1127       break;
  1128     case vmSymbols::VM_SYMBOL_ENUM_NAME(invokeExact_name):
  1128     case vmSymbols::VM_SYMBOL_ENUM_NAME(invokeExact_name):
  1129       id = vmIntrinsics::_invokeExact;
  1129       id = vmIntrinsics::_invokeExact;
  1130       break;
       
  1131     case vmSymbols::VM_SYMBOL_ENUM_NAME(invoke_name):
       
  1132       if (AllowInvokeForInvokeGeneric)   id = vmIntrinsics::_invokeGeneric;
       
  1133       else if (AllowTransitionalJSR292)  id = vmIntrinsics::_invokeExact;
       
  1134       break;
  1130       break;
  1135     }
  1131     }
  1136     break;
  1132     break;
  1137   case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_InvokeDynamic):
  1133   case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_InvokeDynamic):
  1138     if (!is_static() || !is_native())  break;
  1134     if (!is_static() || !is_native())  break;