Interpreter.
The opcodes filled-new-array and packed-switch aren't implemented but
are trivial given that they are variants of implemented opcodes.
Refactor Field::Get routines to take the declaring class in the case of
static field accesses. This avoids a check on every use of a field.
Refactor arg array builder to be shared by JNI invokes and invocations
into the interpreter.
Fix benign bug in const decoding in the verifier.
Change-Id: I8dee6c1f4b7f033e6c003422c56e9471cfaccda8
diff --git a/src/verifier/method_verifier.cc b/src/verifier/method_verifier.cc
index bd77a3c..9a933bf 100644
--- a/src/verifier/method_verifier.cc
+++ b/src/verifier/method_verifier.cc
@@ -1501,15 +1501,23 @@
break;
case Instruction::CONST_4:
+ /* could be boolean, int, float, or a null reference */
+ work_line_->SetRegisterType(dec_insn.vA,
+ reg_types_.FromCat1Const((dec_insn.vB << 28) >> 28));
+ break;
case Instruction::CONST_16:
+ /* could be boolean, int, float, or a null reference */
+ work_line_->SetRegisterType(dec_insn.vA,
+ reg_types_.FromCat1Const(static_cast<int16_t>(dec_insn.vB)));
+ break;
case Instruction::CONST:
/* could be boolean, int, float, or a null reference */
- work_line_->SetRegisterType(dec_insn.vA, reg_types_.FromCat1Const((int32_t) dec_insn.vB));
+ work_line_->SetRegisterType(dec_insn.vA, reg_types_.FromCat1Const(dec_insn.vB));
break;
case Instruction::CONST_HIGH16:
/* could be boolean, int, float, or a null reference */
work_line_->SetRegisterType(dec_insn.vA,
- reg_types_.FromCat1Const((int32_t) dec_insn.vB << 16));
+ reg_types_.FromCat1Const(dec_insn.vB << 16));
break;
case Instruction::CONST_WIDE_16:
case Instruction::CONST_WIDE_32: