Mercurial > hg > truffle
comparison src/share/vm/prims/methodHandles.hpp @ 1507:cd5dbf694d45
6939134: JSR 292 adjustments to method handle invocation
Summary: split MethodHandle.invoke into invokeExact and invokeGeneric; also clean up JVM-to-Java interfaces
Reviewed-by: twisti
author | jrose |
---|---|
date | Sat, 01 May 2010 02:42:18 -0700 |
parents | 2338d41fbd81 |
children | c18cbe5936b8 |
comparison
equal
deleted
inserted
replaced
1506:2338d41fbd81 | 1507:cd5dbf694d45 |
---|---|
214 } | 214 } |
215 static int adapter_conversion_vminfo(jint conv) { | 215 static int adapter_conversion_vminfo(jint conv) { |
216 return (conv >> CONV_VMINFO_SHIFT) & CONV_VMINFO_MASK; | 216 return (conv >> CONV_VMINFO_SHIFT) & CONV_VMINFO_MASK; |
217 } | 217 } |
218 | 218 |
219 // Bit mask of conversion_op values. May vary by platform. | |
220 static int adapter_conversion_ops_supported_mask(); | |
221 | |
219 // Offset in words that the interpreter stack pointer moves when an argument is pushed. | 222 // Offset in words that the interpreter stack pointer moves when an argument is pushed. |
220 // The stack_move value must always be a multiple of this. | 223 // The stack_move value must always be a multiple of this. |
221 static int stack_move_unit() { | 224 static int stack_move_unit() { |
222 return frame::interpreter_frame_expression_stack_direction() * Interpreter::stackElementWords; | 225 return frame::interpreter_frame_expression_stack_direction() * Interpreter::stackElementWords; |
223 } | 226 } |
260 | 263 |
261 public: | 264 public: |
262 // working with member names | 265 // working with member names |
263 static void resolve_MemberName(Handle mname, TRAPS); // compute vmtarget/vmindex from name/type | 266 static void resolve_MemberName(Handle mname, TRAPS); // compute vmtarget/vmindex from name/type |
264 static void expand_MemberName(Handle mname, int suppress, TRAPS); // expand defc/name/type if missing | 267 static void expand_MemberName(Handle mname, int suppress, TRAPS); // expand defc/name/type if missing |
268 static Handle new_MemberName(TRAPS); // must be followed by init_MemberName | |
265 static void init_MemberName(oop mname_oop, oop target); // compute vmtarget/vmindex from target | 269 static void init_MemberName(oop mname_oop, oop target); // compute vmtarget/vmindex from target |
266 static void init_MemberName(oop mname_oop, methodOop m, bool do_dispatch); | 270 static void init_MemberName(oop mname_oop, methodOop m, bool do_dispatch = true); |
267 static void init_MemberName(oop mname_oop, klassOop field_holder, AccessFlags mods, int offset); | 271 static void init_MemberName(oop mname_oop, klassOop field_holder, AccessFlags mods, int offset); |
268 static int find_MemberNames(klassOop k, symbolOop name, symbolOop sig, | 272 static int find_MemberNames(klassOop k, symbolOop name, symbolOop sig, |
269 int mflags, klassOop caller, | 273 int mflags, klassOop caller, |
270 int skip, objArrayOop results); | 274 int skip, objArrayOop results); |
271 // bit values for suppress argument to expand_MemberName: | 275 // bit values for suppress argument to expand_MemberName: |
298 static methodOop decode_method(oop x, klassOop& receiver_limit_result, int& decode_flags_result); | 302 static methodOop decode_method(oop x, klassOop& receiver_limit_result, int& decode_flags_result); |
299 enum { | 303 enum { |
300 // format of query to getConstant: | 304 // format of query to getConstant: |
301 GC_JVM_PUSH_LIMIT = 0, | 305 GC_JVM_PUSH_LIMIT = 0, |
302 GC_JVM_STACK_MOVE_UNIT = 1, | 306 GC_JVM_STACK_MOVE_UNIT = 1, |
307 GC_CONV_OP_IMPLEMENTED_MASK = 2, | |
303 | 308 |
304 // format of result from getTarget / encode_target: | 309 // format of result from getTarget / encode_target: |
305 ETF_HANDLE_OR_METHOD_NAME = 0, // all available data (immediate MH or method) | 310 ETF_HANDLE_OR_METHOD_NAME = 0, // all available data (immediate MH or method) |
306 ETF_DIRECT_HANDLE = 1, // ultimate method handle (will be a DMH, may be self) | 311 ETF_DIRECT_HANDLE = 1, // ultimate method handle (will be a DMH, may be self) |
307 ETF_METHOD_NAME = 2, // ultimate method as MemberName | 312 ETF_METHOD_NAME = 2, // ultimate method as MemberName |
308 ETF_REFLECT_METHOD = 3 // ultimate method as java.lang.reflect object (sans refClass) | 313 ETF_REFLECT_METHOD = 3 // ultimate method as java.lang.reflect object (sans refClass) |
309 }; | 314 }; |
310 static int get_named_constant(int which, Handle name_box, TRAPS); | 315 static int get_named_constant(int which, Handle name_box, TRAPS); |
311 static oop encode_target(Handle mh, int format, TRAPS); // report vmtarget (to Java code) | 316 static oop encode_target(Handle mh, int format, TRAPS); // report vmtarget (to Java code) |
312 static bool class_cast_needed(klassOop src, klassOop dst); | 317 static bool class_cast_needed(klassOop src, klassOop dst); |
318 | |
319 static instanceKlassHandle resolve_instance_klass(oop java_mirror_oop, TRAPS); | |
320 static instanceKlassHandle resolve_instance_klass(jclass java_mirror_jh, TRAPS) { | |
321 return resolve_instance_klass(JNIHandles::resolve(java_mirror_jh), THREAD); | |
322 } | |
313 | 323 |
314 private: | 324 private: |
315 // These checkers operate on a pair of whole MethodTypes: | 325 // These checkers operate on a pair of whole MethodTypes: |
316 static const char* check_method_type_change(oop src_mtype, int src_beg, int src_end, | 326 static const char* check_method_type_change(oop src_mtype, int src_beg, int src_end, |
317 int insert_argnum, oop insert_type, | 327 int insert_argnum, oop insert_type, |