diff options
Diffstat (limited to 'runtime/mirror/dex_cache.h')
-rw-r--r-- | runtime/mirror/dex_cache.h | 31 |
1 files changed, 12 insertions, 19 deletions
diff --git a/runtime/mirror/dex_cache.h b/runtime/mirror/dex_cache.h index c548c03..7e30b89 100644 --- a/runtime/mirror/dex_cache.h +++ b/runtime/mirror/dex_cache.h @@ -50,7 +50,7 @@ class MANAGED DexCache FINAL : public Object { ObjectArray<String>* strings, ObjectArray<Class>* types, ObjectArray<ArtMethod>* methods, - ObjectArray<ArtField>* fields) + Array* fields) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); void Fixup(ArtMethod* trampoline) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); @@ -116,23 +116,16 @@ class MANAGED DexCache FINAL : public Object { GetResolvedMethods()->Set(method_idx, resolved); } - ArtField* GetResolvedField(uint32_t field_idx) ALWAYS_INLINE - SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { - ArtField* field = GetResolvedFields()->Get(field_idx); - if (UNLIKELY(field == nullptr || field->GetDeclaringClass()->IsErroneous())) { - return nullptr; - } else { - return field; - } - } + // Pointer sized variant, used for patching. + ArtField* GetResolvedField(uint32_t idx, size_t ptr_size) + SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); - void SetResolvedField(uint32_t field_idx, ArtField* resolved) ALWAYS_INLINE - SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { - GetResolvedFields()->Set(field_idx, resolved); - } + // Pointer sized variant, used for patching. + void SetResolvedField(uint32_t idx, ArtField* field, size_t ptr_size) + SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); ObjectArray<String>* GetStrings() ALWAYS_INLINE SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { - return GetFieldObject< ObjectArray<String>>(StringsOffset()); + return GetFieldObject<ObjectArray<String>>(StringsOffset()); } ObjectArray<Class>* GetResolvedTypes() ALWAYS_INLINE SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { @@ -145,9 +138,8 @@ class MANAGED DexCache FINAL : public Object { return GetFieldObject< ObjectArray<ArtMethod>>(ResolvedMethodsOffset()); } - ObjectArray<ArtField>* GetResolvedFields() ALWAYS_INLINE - SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { - return GetFieldObject<ObjectArray<ArtField>>(ResolvedFieldsOffset()); + Array* GetResolvedFields() ALWAYS_INLINE SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { + return GetFieldObject<Array>(ResolvedFieldsOffset()); } const DexFile* GetDexFile() ALWAYS_INLINE SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { @@ -162,7 +154,8 @@ class MANAGED DexCache FINAL : public Object { private: HeapReference<Object> dex_; HeapReference<String> location_; - HeapReference<ObjectArray<ArtField>> resolved_fields_; + // Either an int array or long array (64 bit). + HeapReference<Object> resolved_fields_; HeapReference<ObjectArray<ArtMethod>> resolved_methods_; HeapReference<ObjectArray<Class>> resolved_types_; HeapReference<ObjectArray<String>> strings_; |