< prev index next >
src/share/vm/ci/ciTypeFlow.cpp
Print this page
*** 545,560 ****
}
}
}
// ------------------------------------------------------------------
! // ciTypeFlow::StateVector::do_aaload
! void ciTypeFlow::StateVector::do_aaload(ciBytecodeStream* str) {
pop_int();
! ciObjArrayKlass* array_klass = pop_objArray();
if (array_klass == NULL) {
! // Did aaload on a null reference; push a null and ignore the exception.
// This instruction will never continue normally. All we have to do
// is report a value that will meet correctly with any downstream
// reference types on paths that will truly be executed. This null type
// meets with any reference type to yield that same reference type.
// (The compiler will generate an unconditional exception here.)
--- 545,560 ----
}
}
}
// ------------------------------------------------------------------
! // ciTypeFlow::StateVector::do_aload
! void ciTypeFlow::StateVector::do_aload(ciBytecodeStream* str) {
pop_int();
! ciArrayKlass* array_klass = pop_objOrValueArray();
if (array_klass == NULL) {
! // Did aload on a null reference; push a null and ignore the exception.
// This instruction will never continue normally. All we have to do
// is report a value that will meet correctly with any downstream
// reference types on paths that will truly be executed. This null type
// meets with any reference type to yield that same reference type.
// (The compiler will generate an unconditional exception here.)
*** 904,920 ****
tty->print_cr(">> Interpreting bytecode %d:%s", str->cur_bci(),
Bytecodes::name(str->cur_bc()));
}
switch(str->cur_bc()) {
! case Bytecodes::_aaload: do_aaload(str); break;
case Bytecodes::_aastore:
{
pop_object();
pop_int();
! pop_objArray();
break;
}
case Bytecodes::_aconst_null:
{
push_null();
--- 904,922 ----
tty->print_cr(">> Interpreting bytecode %d:%s", str->cur_bci(),
Bytecodes::name(str->cur_bc()));
}
switch(str->cur_bc()) {
! case Bytecodes::_vaload:
! case Bytecodes::_aaload: do_aload(str); break;
+ case Bytecodes::_vastore:
case Bytecodes::_aastore:
{
pop_object();
pop_int();
! pop_objOrValueArray();
break;
}
case Bytecodes::_aconst_null:
{
push_null();
*** 933,943 ****
bool will_link;
ciKlass* element_klass = str->get_klass(will_link);
if (!will_link) {
trap(str, element_klass, str->get_klass_index());
} else {
! push_object(ciObjArrayKlass::make(element_klass));
}
break;
}
case Bytecodes::_areturn:
case Bytecodes::_vreturn:
--- 935,945 ----
bool will_link;
ciKlass* element_klass = str->get_klass(will_link);
if (!will_link) {
trap(str, element_klass, str->get_klass_index());
} else {
! push_object(ciArrayKlass::make(element_klass));
}
break;
}
case Bytecodes::_areturn:
case Bytecodes::_vreturn:
< prev index next >