32 #include "runtime/interfaceSupport.hpp" 33 34 class MacroAssembler; 35 class Label; 36 37 class MethodHandles: AllStatic { 38 // JVM support for MethodHandle, MethodType, and related types 39 // in java.lang.invoke and sun.invoke. 40 // See also javaClasses for layouts java_lang_invoke_Method{Handle,Type,Type::Form}. 41 public: 42 public: 43 static bool enabled() { return _enabled; } 44 static void set_enabled(bool z); 45 46 private: 47 static bool _enabled; 48 49 // Adapters. 50 static MethodHandlesAdapterBlob* _adapter_code; 51 52 public: 53 // working with member names 54 static Handle resolve_MemberName(Handle mname, TRAPS); // compute vmtarget/vmindex from name/type 55 static void expand_MemberName(Handle mname, int suppress, TRAPS); // expand defc/name/type if missing 56 static Handle new_MemberName(TRAPS); // must be followed by init_MemberName 57 static oop init_MemberName(Handle mname_h, Handle target_h); // compute vmtarget/vmindex from target 58 static oop init_method_MemberName(Handle mname_h, Method* m, bool do_dispatch, 59 KlassHandle receiver_limit_h); 60 static oop init_field_MemberName(Handle mname_h, KlassHandle field_holder_h, 61 AccessFlags mods, oop type, oop name, 62 intptr_t offset, bool is_setter = false); 63 static Handle init_method_MemberName(Handle mname_h, CallInfo& info, TRAPS); 64 static Handle init_field_MemberName(Handle mname_h, FieldAccessInfo& info, TRAPS); 65 static int method_ref_kind(Method* m, bool do_dispatch_if_possible = true); 66 static int find_MemberNames(KlassHandle k, Symbol* name, Symbol* sig, 67 int mflags, KlassHandle caller, 68 int skip, objArrayHandle results); 69 // bit values for suppress argument to expand_MemberName: 70 enum { _suppress_defc = 1, _suppress_name = 2, _suppress_type = 4 }; 71 72 // Generate MethodHandles adapters. 73 static void generate_adapters(); 74 75 // Called from MethodHandlesAdapterGenerator. 76 static address generate_method_handle_interpreter_entry(MacroAssembler* _masm, vmIntrinsics::ID iid); 77 static void generate_method_handle_dispatch(MacroAssembler* _masm, 78 vmIntrinsics::ID iid, 79 Register receiver_reg, 80 Register member_reg, 81 bool for_compiler_entry); 82 83 // Queries 84 static bool is_signature_polymorphic(vmIntrinsics::ID iid) { | 32 #include "runtime/interfaceSupport.hpp" 33 34 class MacroAssembler; 35 class Label; 36 37 class MethodHandles: AllStatic { 38 // JVM support for MethodHandle, MethodType, and related types 39 // in java.lang.invoke and sun.invoke. 40 // See also javaClasses for layouts java_lang_invoke_Method{Handle,Type,Type::Form}. 41 public: 42 public: 43 static bool enabled() { return _enabled; } 44 static void set_enabled(bool z); 45 46 private: 47 static bool _enabled; 48 49 // Adapters. 50 static MethodHandlesAdapterBlob* _adapter_code; 51 52 // utility functions for reifying names and types 53 static oop field_name_or_null(Symbol* s); 54 static oop field_signature_type_or_null(Symbol* s); 55 56 public: 57 // working with member names 58 static Handle resolve_MemberName(Handle mname, TRAPS); // compute vmtarget/vmindex from name/type 59 static void expand_MemberName(Handle mname, int suppress, TRAPS); // expand defc/name/type if missing 60 static Handle new_MemberName(TRAPS); // must be followed by init_MemberName 61 static oop init_MemberName(Handle mname_h, Handle target_h); // compute vmtarget/vmindex from target 62 static oop init_field_MemberName(Handle mname_h, fieldDescriptor& fd, bool is_setter = false); 63 static oop init_method_MemberName(Handle mname_h, CallInfo& info); 64 static int method_ref_kind(Method* m, bool do_dispatch_if_possible = true); 65 static int find_MemberNames(KlassHandle k, Symbol* name, Symbol* sig, 66 int mflags, KlassHandle caller, 67 int skip, objArrayHandle results); 68 // bit values for suppress argument to expand_MemberName: 69 enum { _suppress_defc = 1, _suppress_name = 2, _suppress_type = 4 }; 70 71 // Generate MethodHandles adapters. 72 static void generate_adapters(); 73 74 // Called from MethodHandlesAdapterGenerator. 75 static address generate_method_handle_interpreter_entry(MacroAssembler* _masm, vmIntrinsics::ID iid); 76 static void generate_method_handle_dispatch(MacroAssembler* _masm, 77 vmIntrinsics::ID iid, 78 Register receiver_reg, 79 Register member_reg, 80 bool for_compiler_entry); 81 82 // Queries 83 static bool is_signature_polymorphic(vmIntrinsics::ID iid) { |