summaryrefslogtreecommitdiffstats
path: root/compiler/image_writer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/image_writer.cc')
-rw-r--r--compiler/image_writer.cc10
1 files changed, 6 insertions, 4 deletions
diff --git a/compiler/image_writer.cc b/compiler/image_writer.cc
index cf2cddb896..b7283a4e19 100644
--- a/compiler/image_writer.cc
+++ b/compiler/image_writer.cc
@@ -484,13 +484,14 @@ void ImageWriter::WalkInstanceFields(mirror::Object* obj, mirror::Class* klass)
}
//
size_t num_reference_fields = h_class->NumReferenceInstanceFields();
+ MemberOffset field_offset = h_class->GetFirstReferenceInstanceFieldOffset();
for (size_t i = 0; i < num_reference_fields; ++i) {
- mirror::ArtField* field = h_class->GetInstanceField(i);
- MemberOffset field_offset = field->GetOffset();
mirror::Object* value = obj->GetFieldObject<mirror::Object>(field_offset);
if (value != nullptr) {
WalkFieldsInOrder(value);
}
+ field_offset = MemberOffset(field_offset.Uint32Value() +
+ sizeof(mirror::HeapReference<mirror::Object>));
}
}
@@ -507,13 +508,14 @@ void ImageWriter::WalkFieldsInOrder(mirror::Object* obj) {
// Walk static fields of a Class.
if (h_obj->IsClass()) {
size_t num_static_fields = klass->NumReferenceStaticFields();
+ MemberOffset field_offset = klass->GetFirstReferenceStaticFieldOffset();
for (size_t i = 0; i < num_static_fields; ++i) {
- mirror::ArtField* field = klass->GetStaticField(i);
- MemberOffset field_offset = field->GetOffset();
mirror::Object* value = h_obj->GetFieldObject<mirror::Object>(field_offset);
if (value != nullptr) {
WalkFieldsInOrder(value);
}
+ field_offset = MemberOffset(field_offset.Uint32Value() +
+ sizeof(mirror::HeapReference<mirror::Object>));
}
} else if (h_obj->IsObjectArray()) {
// Walk elements of an object array.