src/share/vm/prims/methodHandles.hpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 7010180 Sdiff src/share/vm/prims

src/share/vm/prims/methodHandles.hpp

Print this page




 277   // The result is *not* reported as a multiple of stack_move_unit();
 278   // It is a signed net number of pushes (a difference in vmslots).
 279   // To compare with a stack_move value, first multiply by stack_move_unit().
 280   static int decode_MethodHandle_stack_pushes(oop mh);
 281 
 282  public:
 283   // working with member names
 284   static void resolve_MemberName(Handle mname, TRAPS); // compute vmtarget/vmindex from name/type
 285   static void expand_MemberName(Handle mname, int suppress, TRAPS);  // expand defc/name/type if missing
 286   static Handle new_MemberName(TRAPS);  // must be followed by init_MemberName
 287   static void init_MemberName(oop mname_oop, oop target); // compute vmtarget/vmindex from target
 288   static void init_MemberName(oop mname_oop, methodOop m, bool do_dispatch = true);
 289   static void init_MemberName(oop mname_oop, klassOop field_holder, AccessFlags mods, int offset);
 290   static int find_MemberNames(klassOop k, symbolOop name, symbolOop sig,
 291                               int mflags, klassOop caller,
 292                               int skip, objArrayOop results);
 293   // bit values for suppress argument to expand_MemberName:
 294   enum { _suppress_defc = 1, _suppress_name = 2, _suppress_type = 4 };
 295 
 296   // Generate MethodHandles adapters.
 297   static void generate_adapters(TRAPS);
 298 
 299   // Called from InterpreterGenerator and MethodHandlesAdapterGenerator.
 300   static address generate_method_handle_interpreter_entry(MacroAssembler* _masm);
 301   static void generate_method_handle_stub(MacroAssembler* _masm, EntryKind ek, TRAPS);
 302 
 303   // argument list parsing
 304   static int argument_slot(oop method_type, int arg);
 305   static int argument_slot_count(oop method_type) { return argument_slot(method_type, -1); }
 306   static int argument_slot_to_argnum(oop method_type, int argslot);
 307 
 308   // Runtime support
 309   enum {                        // bit-encoded flags from decode_method or decode_vmref
 310     _dmf_has_receiver   = 0x01, // target method has leading reference argument
 311     _dmf_does_dispatch  = 0x02, // method handle performs virtual or interface dispatch
 312     _dmf_from_interface = 0x04, // peforms interface dispatch
 313     _DMF_DIRECT_MASK    = (_dmf_from_interface*2 - _dmf_has_receiver),
 314     _dmf_binds_method   = 0x08,
 315     _dmf_binds_argument = 0x10,
 316     _DMF_BOUND_MASK     = (_dmf_binds_argument*2 - _dmf_binds_method),
 317     _dmf_adapter_lsb    = 0x20,
 318     _DMF_ADAPTER_MASK   = (_dmf_adapter_lsb << CONV_OP_LIMIT) - _dmf_adapter_lsb
 319   };
 320   static methodOop decode_method(oop x, klassOop& receiver_limit_result, int& decode_flags_result);
 321   enum {


 513   static int type_checking_entry_offset_in_bytes() {
 514     return (int)( offset_of(Data, _from_interpreted_entry) - sizeof(Data) );
 515   }
 516 
 517   static address            start_compiled_entry(MacroAssembler* _masm,
 518                                                  address interpreted_entry = NULL);
 519   static MethodHandleEntry* finish_compiled_entry(MacroAssembler* masm, address start_addr);
 520 };
 521 
 522 address MethodHandles::from_compiled_entry(EntryKind ek) { return entry(ek)->from_compiled_entry(); }
 523 address MethodHandles::from_interpreted_entry(EntryKind ek) { return entry(ek)->from_interpreted_entry(); }
 524 
 525 
 526 //------------------------------------------------------------------------------
 527 // MethodHandlesAdapterGenerator
 528 //
 529 class MethodHandlesAdapterGenerator : public StubCodeGenerator {
 530 public:
 531   MethodHandlesAdapterGenerator(CodeBuffer* code) : StubCodeGenerator(code) {}
 532 
 533   void generate(TRAPS);
 534 };
 535 
 536 #endif // SHARE_VM_PRIMS_METHODHANDLES_HPP


 277   // The result is *not* reported as a multiple of stack_move_unit();
 278   // It is a signed net number of pushes (a difference in vmslots).
 279   // To compare with a stack_move value, first multiply by stack_move_unit().
 280   static int decode_MethodHandle_stack_pushes(oop mh);
 281 
 282  public:
 283   // working with member names
 284   static void resolve_MemberName(Handle mname, TRAPS); // compute vmtarget/vmindex from name/type
 285   static void expand_MemberName(Handle mname, int suppress, TRAPS);  // expand defc/name/type if missing
 286   static Handle new_MemberName(TRAPS);  // must be followed by init_MemberName
 287   static void init_MemberName(oop mname_oop, oop target); // compute vmtarget/vmindex from target
 288   static void init_MemberName(oop mname_oop, methodOop m, bool do_dispatch = true);
 289   static void init_MemberName(oop mname_oop, klassOop field_holder, AccessFlags mods, int offset);
 290   static int find_MemberNames(klassOop k, symbolOop name, symbolOop sig,
 291                               int mflags, klassOop caller,
 292                               int skip, objArrayOop results);
 293   // bit values for suppress argument to expand_MemberName:
 294   enum { _suppress_defc = 1, _suppress_name = 2, _suppress_type = 4 };
 295 
 296   // Generate MethodHandles adapters.
 297   static void generate_adapters();
 298 
 299   // Called from InterpreterGenerator and MethodHandlesAdapterGenerator.
 300   static address generate_method_handle_interpreter_entry(MacroAssembler* _masm);
 301   static void generate_method_handle_stub(MacroAssembler* _masm, EntryKind ek);
 302 
 303   // argument list parsing
 304   static int argument_slot(oop method_type, int arg);
 305   static int argument_slot_count(oop method_type) { return argument_slot(method_type, -1); }
 306   static int argument_slot_to_argnum(oop method_type, int argslot);
 307 
 308   // Runtime support
 309   enum {                        // bit-encoded flags from decode_method or decode_vmref
 310     _dmf_has_receiver   = 0x01, // target method has leading reference argument
 311     _dmf_does_dispatch  = 0x02, // method handle performs virtual or interface dispatch
 312     _dmf_from_interface = 0x04, // peforms interface dispatch
 313     _DMF_DIRECT_MASK    = (_dmf_from_interface*2 - _dmf_has_receiver),
 314     _dmf_binds_method   = 0x08,
 315     _dmf_binds_argument = 0x10,
 316     _DMF_BOUND_MASK     = (_dmf_binds_argument*2 - _dmf_binds_method),
 317     _dmf_adapter_lsb    = 0x20,
 318     _DMF_ADAPTER_MASK   = (_dmf_adapter_lsb << CONV_OP_LIMIT) - _dmf_adapter_lsb
 319   };
 320   static methodOop decode_method(oop x, klassOop& receiver_limit_result, int& decode_flags_result);
 321   enum {


 513   static int type_checking_entry_offset_in_bytes() {
 514     return (int)( offset_of(Data, _from_interpreted_entry) - sizeof(Data) );
 515   }
 516 
 517   static address            start_compiled_entry(MacroAssembler* _masm,
 518                                                  address interpreted_entry = NULL);
 519   static MethodHandleEntry* finish_compiled_entry(MacroAssembler* masm, address start_addr);
 520 };
 521 
 522 address MethodHandles::from_compiled_entry(EntryKind ek) { return entry(ek)->from_compiled_entry(); }
 523 address MethodHandles::from_interpreted_entry(EntryKind ek) { return entry(ek)->from_interpreted_entry(); }
 524 
 525 
 526 //------------------------------------------------------------------------------
 527 // MethodHandlesAdapterGenerator
 528 //
 529 class MethodHandlesAdapterGenerator : public StubCodeGenerator {
 530 public:
 531   MethodHandlesAdapterGenerator(CodeBuffer* code) : StubCodeGenerator(code) {}
 532 
 533   void generate();
 534 };
 535 
 536 #endif // SHARE_VM_PRIMS_METHODHANDLES_HPP
src/share/vm/prims/methodHandles.hpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File