hotspot/src/share/vm/oops/methodOop.cpp
changeset 8676 9098d4e927e1
parent 8675 e9fef2a9bef7
child 9116 9bc44be338d6
equal deleted inserted replaced
8675:e9fef2a9bef7 8676:9098d4e927e1
   863 
   863 
   864 // Constant pool structure for invoke methods:
   864 // Constant pool structure for invoke methods:
   865 enum {
   865 enum {
   866   _imcp_invoke_name = 1,        // utf8: 'invokeExact' or 'invokeGeneric'
   866   _imcp_invoke_name = 1,        // utf8: 'invokeExact' or 'invokeGeneric'
   867   _imcp_invoke_signature,       // utf8: (variable Symbol*)
   867   _imcp_invoke_signature,       // utf8: (variable Symbol*)
   868   _imcp_method_type_value,      // string: (variable java/dyn/MethodType, sic)
   868   _imcp_method_type_value,      // string: (variable java/lang/invoke/MethodType, sic)
   869   _imcp_limit
   869   _imcp_limit
   870 };
   870 };
   871 
   871 
   872 oop methodOopDesc::method_handle_type() const {
   872 oop methodOopDesc::method_handle_type() const {
   873   if (!is_method_handle_invoke()) { assert(false, "caller resp."); return NULL; }
   873   if (!is_method_handle_invoke()) { assert(false, "caller resp."); return NULL; }
  1089 
  1089 
  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_dyn_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)
  1095       && sig_id == vmSymbols::NO_SID)  return;
  1096       && sig_id == vmSymbols::NO_SID)  return;
  1096   jshort flags = access_flags().as_short();
  1097   jshort flags = access_flags().as_short();
  1097 
  1098 
  1098   vmIntrinsics::ID id = vmIntrinsics::find_id(klass_id, name_id, sig_id, flags);
  1099   vmIntrinsics::ID id = vmIntrinsics::find_id(klass_id, name_id, sig_id, flags);
  1099   if (id != vmIntrinsics::_none) {
  1100   if (id != vmIntrinsics::_none) {
  1115       break;
  1116       break;
  1116     }
  1117     }
  1117     break;
  1118     break;
  1118 
  1119 
  1119   // Signature-polymorphic methods: MethodHandle.invoke*, InvokeDynamic.*.
  1120   // Signature-polymorphic methods: MethodHandle.invoke*, InvokeDynamic.*.
  1120   case vmSymbols::VM_SYMBOL_ENUM_NAME(java_dyn_MethodHandle):
  1121   case vmSymbols::VM_SYMBOL_ENUM_NAME(java_dyn_MethodHandle):  // AllowTransitionalJSR292 ONLY
       
  1122   case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_MethodHandle):
  1121     if (is_static() || !is_native())  break;
  1123     if (is_static() || !is_native())  break;
  1122     switch (name_id) {
  1124     switch (name_id) {
  1123     case vmSymbols::VM_SYMBOL_ENUM_NAME(invokeGeneric_name):
  1125     case vmSymbols::VM_SYMBOL_ENUM_NAME(invokeGeneric_name):
  1124       id = vmIntrinsics::_invokeGeneric;
  1126       id = vmIntrinsics::_invokeGeneric;
  1125       break;
  1127       break;
  1130       if (AllowInvokeForInvokeGeneric)   id = vmIntrinsics::_invokeGeneric;
  1132       if (AllowInvokeForInvokeGeneric)   id = vmIntrinsics::_invokeGeneric;
  1131       else if (AllowTransitionalJSR292)  id = vmIntrinsics::_invokeExact;
  1133       else if (AllowTransitionalJSR292)  id = vmIntrinsics::_invokeExact;
  1132       break;
  1134       break;
  1133     }
  1135     }
  1134     break;
  1136     break;
  1135   case vmSymbols::VM_SYMBOL_ENUM_NAME(java_dyn_InvokeDynamic):
  1137   case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_InvokeDynamic):
  1136     if (!is_static() || !is_native())  break;
  1138     if (!is_static() || !is_native())  break;
  1137     id = vmIntrinsics::_invokeDynamic;
  1139     id = vmIntrinsics::_invokeDynamic;
  1138     break;
  1140     break;
  1139   }
  1141   }
  1140 
  1142