diff options
author | 2017-03-14 14:18:46 +0000 | |
---|---|---|
committer | 2017-03-14 19:03:20 +0000 | |
commit | f44d36c8423f81cbb5e9f55d8813e26ffa1a7f3b (patch) | |
tree | 324b41485ce6c414c1a006c72cbcc5ed9f466138 /runtime/class_linker-inl.h | |
parent | 8d6768d47b66a688d35399d524ad5a5450e9d9d4 (diff) |
Revert^2 "Hash-based DexCache field array."
Test: testrunner.py --host --interpreter
Bug: 30627598
This reverts commit 6374c58f2ea403b3a05fb27376110fe4d0fc8e3f.
Change-Id: I275508e288a85d3aa08f7405a1a4f362af43b775
Diffstat (limited to 'runtime/class_linker-inl.h')
-rw-r--r-- | runtime/class_linker-inl.h | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/runtime/class_linker-inl.h b/runtime/class_linker-inl.h index bd510ca0e1..9ddc6cf0ae 100644 --- a/runtime/class_linker-inl.h +++ b/runtime/class_linker-inl.h @@ -161,9 +161,15 @@ inline ArtMethod* ClassLinker::ResolveMethod(Thread* self, return resolved_method; } -inline ArtField* ClassLinker::GetResolvedField(uint32_t field_idx, - ObjPtr<mirror::DexCache> dex_cache) { - return dex_cache->GetResolvedField(field_idx, image_pointer_size_); +inline ArtField* ClassLinker::LookupResolvedField(uint32_t field_idx, + ArtMethod* referrer, + bool is_static) { + ObjPtr<mirror::DexCache> dex_cache = referrer->GetDexCache(); + ArtField* field = dex_cache->GetResolvedField(field_idx, image_pointer_size_); + if (field == nullptr) { + field = LookupResolvedField(field_idx, dex_cache, referrer->GetClassLoader(), is_static); + } + return field; } inline ArtField* ClassLinker::ResolveField(uint32_t field_idx, @@ -171,7 +177,8 @@ inline ArtField* ClassLinker::ResolveField(uint32_t field_idx, bool is_static) { Thread::PoisonObjectPointersIfDebug(); ObjPtr<mirror::Class> declaring_class = referrer->GetDeclaringClass(); - ArtField* resolved_field = GetResolvedField(field_idx, referrer->GetDexCache()); + ArtField* resolved_field = + referrer->GetDexCache()->GetResolvedField(field_idx, image_pointer_size_); if (UNLIKELY(resolved_field == nullptr)) { StackHandleScope<2> hs(Thread::Current()); Handle<mirror::DexCache> dex_cache(hs.NewHandle(referrer->GetDexCache())); |