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/dex_file.cc b/src/dex_file.cc
index c433f3d..b7cefe3 100644
--- a/src/dex_file.cc
+++ b/src/dex_file.cc
@@ -978,18 +978,18 @@
void EncodedStaticFieldValueIterator::ReadValueToField(Field* field) const {
switch (type_) {
- case kBoolean: field->SetBoolean(NULL, jval_.z); break;
- case kByte: field->SetByte(NULL, jval_.b); break;
- case kShort: field->SetShort(NULL, jval_.s); break;
- case kChar: field->SetChar(NULL, jval_.c); break;
- case kInt: field->SetInt(NULL, jval_.i); break;
- case kLong: field->SetLong(NULL, jval_.j); break;
- case kFloat: field->SetFloat(NULL, jval_.f); break;
- case kDouble: field->SetDouble(NULL, jval_.d); break;
- case kNull: field->SetObject(NULL, NULL); break;
+ case kBoolean: field->SetBoolean(field->GetDeclaringClass(), jval_.z); break;
+ case kByte: field->SetByte(field->GetDeclaringClass(), jval_.b); break;
+ case kShort: field->SetShort(field->GetDeclaringClass(), jval_.s); break;
+ case kChar: field->SetChar(field->GetDeclaringClass(), jval_.c); break;
+ case kInt: field->SetInt(field->GetDeclaringClass(), jval_.i); break;
+ case kLong: field->SetLong(field->GetDeclaringClass(), jval_.j); break;
+ case kFloat: field->SetFloat(field->GetDeclaringClass(), jval_.f); break;
+ case kDouble: field->SetDouble(field->GetDeclaringClass(), jval_.d); break;
+ case kNull: field->SetObject(field->GetDeclaringClass(), NULL); break;
case kString: {
String* resolved = linker_->ResolveString(dex_file_, jval_.i, dex_cache_);
- field->SetObject(NULL, resolved);
+ field->SetObject(field->GetDeclaringClass(), resolved);
break;
}
case kType: {