src/share/vm/ci/ciTypeFlow.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/ci/ciTypeFlow.cpp Wed Oct 28 19:51:16 2009
--- new/src/share/vm/ci/ciTypeFlow.cpp Wed Oct 28 19:51:15 2009
*** 633,644 ****
--- 633,651 ----
bool has_receiver) {
bool will_link;
ciMethod* method = str->get_method(will_link);
if (!will_link) {
// We weren't able to find the method.
+ if (str->cur_bc() == Bytecodes::_invokedynamic) {
+ trap(str, NULL,
+ Deoptimization::make_trap_request
+ (Deoptimization::Reason_uninitialized,
+ Deoptimization::Action_reinterpret));
+ } else {
ciKlass* unloaded_holder = method->holder();
trap(str, unloaded_holder, str->get_method_holder_index());
+ }
} else {
ciSignature* signature = method->signature();
ciSignatureStream sigstr(signature);
int arg_size = signature->size();
int stack_base = stack_size() - arg_size;
*** 1290,1301 ****
--- 1297,1308 ----
break;
}
case Bytecodes::_invokeinterface: do_invoke(str, true); break;
case Bytecodes::_invokespecial: do_invoke(str, true); break;
case Bytecodes::_invokestatic: do_invoke(str, false); break;
case Bytecodes::_invokevirtual: do_invoke(str, true); break;
+ case Bytecodes::_invokedynamic: do_invoke(str, false); break;
case Bytecodes::_istore: store_local_int(str->get_index()); break;
case Bytecodes::_istore_0: store_local_int(0); break;
case Bytecodes::_istore_1: store_local_int(1); break;
case Bytecodes::_istore_2: store_local_int(2); break;
src/share/vm/ci/ciTypeFlow.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File