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: