52 public: |
52 public: |
53 // working with member names |
53 // working with member names |
54 static Handle resolve_MemberName(Handle mname, TRAPS); // compute vmtarget/vmindex from name/type |
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 |
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 |
56 static Handle new_MemberName(TRAPS); // must be followed by init_MemberName |
57 static oop init_MemberName(oop mname_oop, oop target_oop); // compute vmtarget/vmindex from target |
57 static oop init_MemberName(Handle mname_h, Handle target_h); // compute vmtarget/vmindex from target |
58 static oop init_method_MemberName(oop mname_oop, Method* m, bool do_dispatch, |
58 static oop init_method_MemberName(Handle mname_h, Method* m, bool do_dispatch, |
59 Klass* receiver_limit); |
59 KlassHandle receiver_limit_h); |
60 static oop init_field_MemberName(oop mname_oop, Klass* field_holder, |
60 static oop init_field_MemberName(Handle mname_h, KlassHandle field_holder_h, |
61 AccessFlags mods, oop type, oop name, |
61 AccessFlags mods, oop type, oop name, |
62 intptr_t offset, bool is_setter = false); |
62 intptr_t offset, bool is_setter = false); |
63 static Handle init_method_MemberName(oop mname_oop, CallInfo& info, TRAPS); |
63 static Handle init_method_MemberName(Handle mname_h, CallInfo& info, TRAPS); |
64 static Handle init_field_MemberName(oop mname_oop, FieldAccessInfo& 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); |
65 static int method_ref_kind(Method* m, bool do_dispatch_if_possible = true); |
66 static int find_MemberNames(Klass* k, Symbol* name, Symbol* sig, |
66 static int find_MemberNames(KlassHandle k, Symbol* name, Symbol* sig, |
67 int mflags, Klass* caller, |
67 int mflags, KlassHandle caller, |
68 int skip, objArrayOop results); |
68 int skip, objArrayHandle results); |
69 // bit values for suppress argument to expand_MemberName: |
69 // bit values for suppress argument to expand_MemberName: |
70 enum { _suppress_defc = 1, _suppress_name = 2, _suppress_type = 4 }; |
70 enum { _suppress_defc = 1, _suppress_name = 2, _suppress_type = 4 }; |
71 |
71 |
72 // Generate MethodHandles adapters. |
72 // Generate MethodHandles adapters. |
73 static void generate_adapters(); |
73 static void generate_adapters(); |
74 |
74 |
75 // Called from MethodHandlesAdapterGenerator. |
75 // Called from MethodHandlesAdapterGenerator. |
76 static address generate_method_handle_interpreter_entry(MacroAssembler* _masm, vmIntrinsics::ID iid); |
76 static address generate_method_handle_interpreter_entry(MacroAssembler* _masm, vmIntrinsics::ID iid); |
77 static void generate_method_handle_dispatch(MacroAssembler* _masm, |
77 static void generate_method_handle_dispatch(MacroAssembler* _masm, |
78 vmIntrinsics::ID iid, |
78 vmIntrinsics::ID iid, |
228 MethodHandlesAdapterGenerator(CodeBuffer* code) : StubCodeGenerator(code, PrintMethodHandleStubs) {} |
228 MethodHandlesAdapterGenerator(CodeBuffer* code) : StubCodeGenerator(code, PrintMethodHandleStubs) {} |
229 |
229 |
230 void generate(); |
230 void generate(); |
231 }; |
231 }; |
232 |
232 |
|
233 //------------------------------------------------------------------------------ |
|
234 // MemberNameTable |
|
235 // |
|
236 class MemberNameTable : public GrowableArray<jweak> { |
|
237 public: |
|
238 MemberNameTable(); |
|
239 ~MemberNameTable(); |
|
240 void add_member_name(jweak mem_name_ref); |
|
241 private: |
|
242 int find_member_name(oop mem_name); |
|
243 |
|
244 #if INCLUDE_JVMTI |
|
245 public: |
|
246 // RedefineClasses() API support: |
|
247 // If a MemberName refers to old_method then update it |
|
248 // to refer to new_method. |
|
249 void adjust_method_entries(Method** old_methods, Method** new_methods, |
|
250 int methods_length, bool *trace_name_printed); |
|
251 private: |
|
252 oop find_member_name_by_method(Method* old_method); |
|
253 #endif // INCLUDE_JVMTI |
|
254 }; |
|
255 |
233 #endif // SHARE_VM_PRIMS_METHODHANDLES_HPP |
256 #endif // SHARE_VM_PRIMS_METHODHANDLES_HPP |