mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-20 11:04:34 +02:00
6939134: JSR 292 adjustments to method handle invocation
Split MethodHandle.invoke into invokeExact and invokeGeneric; also clean up JVM-to-Java interfaces Reviewed-by: twisti
This commit is contained in:
parent
0211f9703a
commit
4eb75c2df3
29 changed files with 413 additions and 233 deletions
|
@ -216,6 +216,9 @@ class MethodHandles: AllStatic {
|
|||
return (conv >> CONV_VMINFO_SHIFT) & CONV_VMINFO_MASK;
|
||||
}
|
||||
|
||||
// Bit mask of conversion_op values. May vary by platform.
|
||||
static int adapter_conversion_ops_supported_mask();
|
||||
|
||||
// Offset in words that the interpreter stack pointer moves when an argument is pushed.
|
||||
// The stack_move value must always be a multiple of this.
|
||||
static int stack_move_unit() {
|
||||
|
@ -262,8 +265,9 @@ class MethodHandles: AllStatic {
|
|||
// working with member names
|
||||
static void resolve_MemberName(Handle mname, TRAPS); // compute vmtarget/vmindex from name/type
|
||||
static void expand_MemberName(Handle mname, int suppress, TRAPS); // expand defc/name/type if missing
|
||||
static Handle new_MemberName(TRAPS); // must be followed by init_MemberName
|
||||
static void init_MemberName(oop mname_oop, oop target); // compute vmtarget/vmindex from target
|
||||
static void init_MemberName(oop mname_oop, methodOop m, bool do_dispatch);
|
||||
static void init_MemberName(oop mname_oop, methodOop m, bool do_dispatch = true);
|
||||
static void init_MemberName(oop mname_oop, klassOop field_holder, AccessFlags mods, int offset);
|
||||
static int find_MemberNames(klassOop k, symbolOop name, symbolOop sig,
|
||||
int mflags, klassOop caller,
|
||||
|
@ -300,6 +304,7 @@ class MethodHandles: AllStatic {
|
|||
// format of query to getConstant:
|
||||
GC_JVM_PUSH_LIMIT = 0,
|
||||
GC_JVM_STACK_MOVE_UNIT = 1,
|
||||
GC_CONV_OP_IMPLEMENTED_MASK = 2,
|
||||
|
||||
// format of result from getTarget / encode_target:
|
||||
ETF_HANDLE_OR_METHOD_NAME = 0, // all available data (immediate MH or method)
|
||||
|
@ -311,6 +316,11 @@ class MethodHandles: AllStatic {
|
|||
static oop encode_target(Handle mh, int format, TRAPS); // report vmtarget (to Java code)
|
||||
static bool class_cast_needed(klassOop src, klassOop dst);
|
||||
|
||||
static instanceKlassHandle resolve_instance_klass(oop java_mirror_oop, TRAPS);
|
||||
static instanceKlassHandle resolve_instance_klass(jclass java_mirror_jh, TRAPS) {
|
||||
return resolve_instance_klass(JNIHandles::resolve(java_mirror_jh), THREAD);
|
||||
}
|
||||
|
||||
private:
|
||||
// These checkers operate on a pair of whole MethodTypes:
|
||||
static const char* check_method_type_change(oop src_mtype, int src_beg, int src_end,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue