src/share/vm/prims/methodHandleWalk.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
7045514 Cdiff src/share/vm/prims/methodHandleWalk.cpp
src/share/vm/prims/methodHandleWalk.cpp
Print this page
*** 176,185 ****
--- 176,191 ----
if (op >= 0 && op < (int)ARRAY_SIZE(adapter_ops))
return adapter_ops[op];
return "unknown_op";
}
+ void MethodHandleChain::print(oopDesc* m) {
+ HandleMark hm;
+ ResourceMark rm;
+ Handle mh(m);
+ print(mh);
+ }
void MethodHandleChain::print(Handle mh) {
EXCEPTION_MARK;
MethodHandleChain mhc(mh, THREAD);
if (HAS_PENDING_EXCEPTION) {
*** 412,423 ****
klassOop dest_klass = NULL;
BasicType dest = java_lang_Class::as_BasicType(chain().adapter_arg_oop(), &dest_klass);
assert(dest == T_OBJECT, "");
ArgToken arg = _outgoing.at(arg_slot);
assert(dest == arg.basic_type(), "");
! ArgToken new_arg = make_conversion(T_OBJECT, dest_klass, Bytecodes::_checkcast, arg, CHECK_(empty));
! assert(!arg.has_index() || arg.index() == new_arg.index(), "should be the same index");
debug_only(dest_klass = (klassOop)badOop);
break;
}
case java_lang_invoke_AdapterMethodHandle::OP_PRIM_TO_PRIM: {
--- 418,428 ----
klassOop dest_klass = NULL;
BasicType dest = java_lang_Class::as_BasicType(chain().adapter_arg_oop(), &dest_klass);
assert(dest == T_OBJECT, "");
ArgToken arg = _outgoing.at(arg_slot);
assert(dest == arg.basic_type(), "");
! arg = make_conversion(T_OBJECT, dest_klass, Bytecodes::_checkcast, arg, CHECK_(empty));
debug_only(dest_klass = (klassOop)badOop);
break;
}
case java_lang_invoke_AdapterMethodHandle::OP_PRIM_TO_PRIM: {
*** 1246,1256 ****
} else {
emit_load(srctype, src.index());
index = src.index();
}
emit_bc(op, cpool_klass_put(tk));
! if (index == -1)
index = new_local_index(type);
emit_store(srctype, index);
break;
case Bytecodes::_nop:
--- 1251,1262 ----
} else {
emit_load(srctype, src.index());
index = src.index();
}
emit_bc(op, cpool_klass_put(tk));
! // Allocate a new local for the type so that we don't hide the
! // previous type from the verifier.
index = new_local_index(type);
emit_store(srctype, index);
break;
case Bytecodes::_nop:
src/share/vm/prims/methodHandleWalk.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File