< prev index next >
src/share/vm/ci/ciTypeFlow.cpp
Print this page
@@ -545,16 +545,16 @@
}
}
}
// ------------------------------------------------------------------
-// ciTypeFlow::StateVector::do_aaload
-void ciTypeFlow::StateVector::do_aaload(ciBytecodeStream* str) {
+// ciTypeFlow::StateVector::do_aload
+void ciTypeFlow::StateVector::do_aload(ciBytecodeStream* str) {
pop_int();
- ciObjArrayKlass* array_klass = pop_objArray();
+ ciArrayKlass* array_klass = pop_objOrValueArray();
if (array_klass == NULL) {
- // Did aaload on a null reference; push a null and ignore the exception.
+ // 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,17 +904,19 @@
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::_vaload:
+ case Bytecodes::_aaload: do_aload(str); break;
+ case Bytecodes::_vastore:
case Bytecodes::_aastore:
{
pop_object();
pop_int();
- pop_objArray();
+ pop_objOrValueArray();
break;
}
case Bytecodes::_aconst_null:
{
push_null();
@@ -933,11 +935,11 @@
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));
+ push_object(ciArrayKlass::make(element_klass));
}
break;
}
case Bytecodes::_areturn:
case Bytecodes::_vreturn:
< prev index next >