equal
deleted
inserted
replaced
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 |