src/share/vm/interpreter/interpreterRuntime.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Cdiff src/share/vm/interpreter/interpreterRuntime.cpp

src/share/vm/interpreter/interpreterRuntime.cpp

Print this page

        

*** 1265,1276 **** #if INCLUDE_JVMTI // This is a support of the JVMTI PopFrame interface. // Make sure it is an invokestatic of a polymorphic intrinsic that has a member_name argument // and return it as a vm_result so that it can be reloaded in the list of invokestatic parameters. ! // The dmh argument is a reference to a DirectMethoHandle that has a member name field. ! IRT_ENTRY(void, InterpreterRuntime::member_name_arg_or_null(JavaThread* thread, address dmh, Method* method, address bcp)) Bytecodes::Code code = Bytecodes::code_at(method, bcp); if (code != Bytecodes::_invokestatic) { return; } --- 1265,1277 ---- #if INCLUDE_JVMTI // This is a support of the JVMTI PopFrame interface. // Make sure it is an invokestatic of a polymorphic intrinsic that has a member_name argument // and return it as a vm_result so that it can be reloaded in the list of invokestatic parameters. ! // The member_name argument is a saved reference (in local#0) to the member_name. ! // For backward compatibility with some JDK versions (7, 8) it can also be a direct method handle. ! IRT_ENTRY(void, InterpreterRuntime::member_name_arg_or_null(JavaThread* thread, address member_name, Method* method, address bcp)) Bytecodes::Code code = Bytecodes::code_at(method, bcp); if (code != Bytecodes::_invokestatic) { return; }
*** 1278,1287 **** int cp_index = Bytes::get_native_u2(bcp + 1) + ConstantPool::CPCACHE_INDEX_TAG; Symbol* cname = cpool->klass_name_at(cpool->klass_ref_index_at(cp_index)); Symbol* mname = cpool->name_ref_at(cp_index); if (MethodHandles::has_member_arg(cname, mname)) { ! oop member_name = java_lang_invoke_DirectMethodHandle::member((oop)dmh); ! thread->set_vm_result(member_name); } IRT_END #endif // INCLUDE_JVMTI --- 1279,1292 ---- int cp_index = Bytes::get_native_u2(bcp + 1) + ConstantPool::CPCACHE_INDEX_TAG; Symbol* cname = cpool->klass_name_at(cpool->klass_ref_index_at(cp_index)); Symbol* mname = cpool->name_ref_at(cp_index); if (MethodHandles::has_member_arg(cname, mname)) { ! oop member_name_oop = (oop) member_name; ! if (java_lang_invoke_DirectMethodHandle::is_instance(member_name_oop)) { ! // FIXME: remove after j.l.i.InvokerBytecodeGenerator code shape is updated. ! member_name_oop = java_lang_invoke_DirectMethodHandle::member(member_name_oop); ! } ! thread->set_vm_result(member_name_oop); } IRT_END #endif // INCLUDE_JVMTI
src/share/vm/interpreter/interpreterRuntime.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File