comparison src/share/vm/interpreter/interpreterRuntime.cpp @ 12010:ca0165daa6ec

7187554: JSR 292: JVMTI PopFrame needs to handle appendix arguments Summary: Restore the appendix argument after PopFrame() call Reviewed-by: twisti, coleenp Contributed-by: serguei.spitsyn@oracle.com
author sspitsyn
date Tue, 06 Aug 2013 16:33:59 -0700
parents 746b070f5022
children 3cce976666d9 b2e698d2276c abe03600372a
comparison
equal deleted inserted replaced
11996:22a5aff0df0b 12010:ca0165daa6ec
1207 int size_of_arguments = (asc.size() + (invoke.has_receiver() ? 1 : 0)); // receiver 1207 int size_of_arguments = (asc.size() + (invoke.has_receiver() ? 1 : 0)); // receiver
1208 Copy::conjoint_jbytes(src_address, dest_address, 1208 Copy::conjoint_jbytes(src_address, dest_address,
1209 size_of_arguments * Interpreter::stackElementSize); 1209 size_of_arguments * Interpreter::stackElementSize);
1210 IRT_END 1210 IRT_END
1211 #endif 1211 #endif
1212
1213 #if INCLUDE_JVMTI
1214 // This is a support of the JVMTI PopFrame interface.
1215 // Make sure it is an invokestatic of a polymorphic intrinsic that has a member_name argument
1216 // and return it as a vm_result so that it can be reloaded in the list of invokestatic parameters.
1217 // The dmh argument is a reference to a DirectMethoHandle that has a member name field.
1218 IRT_ENTRY(void, InterpreterRuntime::member_name_arg_or_null(JavaThread* thread, address dmh,
1219 Method* method, address bcp))
1220 Bytecodes::Code code = Bytecodes::code_at(method, bcp);
1221 if (code != Bytecodes::_invokestatic) {
1222 return;
1223 }
1224 ConstantPool* cpool = method->constants();
1225 int cp_index = Bytes::get_native_u2(bcp + 1) + ConstantPool::CPCACHE_INDEX_TAG;
1226 Symbol* cname = cpool->klass_name_at(cpool->klass_ref_index_at(cp_index));
1227 Symbol* mname = cpool->name_ref_at(cp_index);
1228
1229 if (MethodHandles::has_member_arg(cname, mname)) {
1230 oop member_name = java_lang_invoke_DirectMethodHandle::member((oop)dmh);
1231 thread->set_vm_result(member_name);
1232 }
1233 IRT_END
1234 #endif // INCLUDE_JVMTI