hotspot/src/share/vm/runtime/deoptimization.cpp
changeset 10979 c25dd872c62f
parent 10966 0c9ed2dfc6a2
child 11445 3c768dca60f5
equal deleted inserted replaced
10978:c68bfbbbd60b 10979:c25dd872c62f
   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     }