equal
deleted
inserted
replaced
386 // value so that the proper amount of space can be added to it's |
386 // value so that the proper amount of space can be added to it's |
387 // frame. |
387 // frame. |
388 bool caller_was_method_handle = false; |
388 bool caller_was_method_handle = false; |
389 if (deopt_sender.is_interpreted_frame()) { |
389 if (deopt_sender.is_interpreted_frame()) { |
390 methodHandle method = deopt_sender.interpreter_frame_method(); |
390 methodHandle method = deopt_sender.interpreter_frame_method(); |
391 Bytecode_invoke cur = Bytecode_invoke_check(method, |
391 Bytecode_invoke cur = Bytecode_invoke_check(method, deopt_sender.interpreter_frame_bci()); |
392 deopt_sender.interpreter_frame_bci()); |
392 if (cur.is_method_handle_invoke()) { |
393 if (cur.code() == Bytecodes::_invokedynamic || |
|
394 (cur.code() == Bytecodes::_invokevirtual && |
|
395 method->constants()->klass_ref_at_noresolve(cur.index()) == vmSymbols::java_lang_invoke_MethodHandle() && |
|
396 methodOopDesc::is_method_handle_invoke_name(cur.name()))) { |
|
397 // Method handle invokes may involve fairly arbitrary chains of |
393 // Method handle invokes may involve fairly arbitrary chains of |
398 // calls so it's impossible to know how much actual space the |
394 // calls so it's impossible to know how much actual space the |
399 // caller has for locals. |
395 // caller has for locals. |
400 caller_was_method_handle = true; |
396 caller_was_method_handle = true; |
401 } |
397 } |