1.1 --- a/src/share/vm/prims/methodHandles.hpp Thu Mar 11 05:09:20 2010 -0800 1.2 +++ b/src/share/vm/prims/methodHandles.hpp Tue Mar 16 11:52:17 2010 +0100 1.3 @@ -115,6 +115,10 @@ 1.4 static const char* _entry_names[_EK_LIMIT+1]; 1.5 static jobject _raise_exception_method; 1.6 1.7 + // Adapters. 1.8 + static MethodHandlesAdapterBlob* _adapter_code; 1.9 + static int _adapter_code_size; 1.10 + 1.11 static bool ek_valid(EntryKind ek) { return (uint)ek < (uint)_EK_LIMIT; } 1.12 static bool conv_op_valid(int op) { return (uint)op < (uint)CONV_OP_LIMIT; } 1.13 1.14 @@ -230,7 +234,10 @@ 1.15 // bit values for suppress argument to expand_MemberName: 1.16 enum { _suppress_defc = 1, _suppress_name = 2, _suppress_type = 4 }; 1.17 1.18 - // called from InterpreterGenerator and StubGenerator 1.19 + // Generate MethodHandles adapters. 1.20 + static void generate_adapters(); 1.21 + 1.22 + // Called from InterpreterGenerator and MethodHandlesAdapterGenerator. 1.23 static address generate_method_handle_interpreter_entry(MacroAssembler* _masm); 1.24 static void generate_method_handle_stub(MacroAssembler* _masm, EntryKind ek); 1.25 1.26 @@ -447,3 +454,14 @@ 1.27 1.28 address MethodHandles::from_compiled_entry(EntryKind ek) { return entry(ek)->from_compiled_entry(); } 1.29 address MethodHandles::from_interpreted_entry(EntryKind ek) { return entry(ek)->from_interpreted_entry(); } 1.30 + 1.31 + 1.32 +//------------------------------------------------------------------------------ 1.33 +// MethodHandlesAdapterGenerator 1.34 +// 1.35 +class MethodHandlesAdapterGenerator : public StubCodeGenerator { 1.36 +public: 1.37 + MethodHandlesAdapterGenerator(CodeBuffer* code) : StubCodeGenerator(code) {} 1.38 + 1.39 + void generate(); 1.40 +};