80 } |
80 } |
81 |
81 |
82 |
82 |
83 void MethodHandleChain::set_last_method(oop target, TRAPS) { |
83 void MethodHandleChain::set_last_method(oop target, TRAPS) { |
84 _is_last = true; |
84 _is_last = true; |
85 klassOop receiver_limit_oop = NULL; |
85 KlassHandle receiver_limit; int flags = 0; |
86 int flags = 0; |
86 _last_method = MethodHandles::decode_method(target, receiver_limit, flags); |
87 methodOop m = MethodHandles::decode_method(target, receiver_limit_oop, flags); |
|
88 _last_method = methodHandle(THREAD, m); |
|
89 if ((flags & MethodHandles::_dmf_has_receiver) == 0) |
87 if ((flags & MethodHandles::_dmf_has_receiver) == 0) |
90 _last_invoke = Bytecodes::_invokestatic; |
88 _last_invoke = Bytecodes::_invokestatic; |
91 else if ((flags & MethodHandles::_dmf_does_dispatch) == 0) |
89 else if ((flags & MethodHandles::_dmf_does_dispatch) == 0) |
92 _last_invoke = Bytecodes::_invokespecial; |
90 _last_invoke = Bytecodes::_invokespecial; |
93 else if ((flags & MethodHandles::_dmf_from_interface) != 0) |
91 else if ((flags & MethodHandles::_dmf_from_interface) != 0) |