1289 // For backward compatibility with some JDK versions (7, 8) it can also be a direct method handle.
1290 // FIXME: remove DMH case after j.l.i.InvokerBytecodeGenerator code shape is updated.
1291 IRT_ENTRY(void, InterpreterRuntime::member_name_arg_or_null(JavaThread* thread, address member_name,
1292 Method* method, address bcp))
1293 Bytecodes::Code code = Bytecodes::code_at(method, bcp);
1294 if (code != Bytecodes::_invokestatic) {
1295 return;
1296 }
1297 ConstantPool* cpool = method->constants();
1298 int cp_index = Bytes::get_native_u2(bcp + 1) + ConstantPool::CPCACHE_INDEX_TAG;
1299 Symbol* cname = cpool->klass_name_at(cpool->klass_ref_index_at(cp_index));
1300 Symbol* mname = cpool->name_ref_at(cp_index);
1301
1302 if (MethodHandles::has_member_arg(cname, mname)) {
1303 oop member_name_oop = (oop) member_name;
1304 if (java_lang_invoke_DirectMethodHandle::is_instance(member_name_oop)) {
1305 // FIXME: remove after j.l.i.InvokerBytecodeGenerator code shape is updated.
1306 member_name_oop = java_lang_invoke_DirectMethodHandle::member(member_name_oop);
1307 }
1308 thread->set_vm_result(member_name_oop);
1309 }
1310 IRT_END
1311 #endif // INCLUDE_JVMTI
|
1289 // For backward compatibility with some JDK versions (7, 8) it can also be a direct method handle.
1290 // FIXME: remove DMH case after j.l.i.InvokerBytecodeGenerator code shape is updated.
1291 IRT_ENTRY(void, InterpreterRuntime::member_name_arg_or_null(JavaThread* thread, address member_name,
1292 Method* method, address bcp))
1293 Bytecodes::Code code = Bytecodes::code_at(method, bcp);
1294 if (code != Bytecodes::_invokestatic) {
1295 return;
1296 }
1297 ConstantPool* cpool = method->constants();
1298 int cp_index = Bytes::get_native_u2(bcp + 1) + ConstantPool::CPCACHE_INDEX_TAG;
1299 Symbol* cname = cpool->klass_name_at(cpool->klass_ref_index_at(cp_index));
1300 Symbol* mname = cpool->name_ref_at(cp_index);
1301
1302 if (MethodHandles::has_member_arg(cname, mname)) {
1303 oop member_name_oop = (oop) member_name;
1304 if (java_lang_invoke_DirectMethodHandle::is_instance(member_name_oop)) {
1305 // FIXME: remove after j.l.i.InvokerBytecodeGenerator code shape is updated.
1306 member_name_oop = java_lang_invoke_DirectMethodHandle::member(member_name_oop);
1307 }
1308 thread->set_vm_result(member_name_oop);
1309 } else {
1310 thread->set_vm_result(NULL);
1311 }
1312 IRT_END
1313 #endif // INCLUDE_JVMTI
|