diff options
author | Vladimir Marko <vmarko@google.com> | 2018-11-09 17:12:23 +0000 |
---|---|---|
committer | Vladimir Marko <vmarko@google.com> | 2018-11-12 15:26:21 +0000 |
commit | 104883b04617a850adf11f05e57c2fd29e09c83c (patch) | |
tree | 51d436588505a3ead506d633bdf97c9b4c934ae0 /runtime/mirror/array-inl.h | |
parent | 00e96d054e2b656d4d0f99fc141d1701af4dba23 (diff) |
Clean up primitive array helpers in Object.
Refactor these helpers and avoid read barriers. Remove
Class::Is{Int,Long}ArrayClass() and use the Object helpers
instead.
Remove the AsByteSizedArray() and AsShortSizedArray()
helpers that essentially break the type system and rewrite
their users, adding appropriate notes. {Float,Double}Array
uses in Unsafe would have previously failed a DCHECK().
Test: Additional test in 004-UnsafeTest.
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Change-Id: I88b7e3df7de883f64cfc5eb437a40646f2884685
Diffstat (limited to 'runtime/mirror/array-inl.h')
-rw-r--r-- | runtime/mirror/array-inl.h | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/runtime/mirror/array-inl.h b/runtime/mirror/array-inl.h index 442733234b..a6a5ba298c 100644 --- a/runtime/mirror/array-inl.h +++ b/runtime/mirror/array-inl.h @@ -224,16 +224,14 @@ inline void PrimitiveArray<T>::Memcpy(int32_t dst_pos, } } -template<typename T, VerifyObjectFlags kVerifyFlags, ReadBarrierOption kReadBarrierOption> +template<typename T, VerifyObjectFlags kVerifyFlags> inline T PointerArray::GetElementPtrSize(uint32_t idx, PointerSize ptr_size) { // C style casts here since we sometimes have T be a pointer, or sometimes an integer // (for stack traces). if (ptr_size == PointerSize::k64) { - return (T)static_cast<uintptr_t>( - AsLongArray<kVerifyFlags, kReadBarrierOption>()->GetWithoutChecks(idx)); + return (T)static_cast<uintptr_t>(AsLongArray<kVerifyFlags>()->GetWithoutChecks(idx)); } - return (T)static_cast<uintptr_t>(static_cast<uint32_t>( - AsIntArray<kVerifyFlags, kReadBarrierOption>()->GetWithoutChecks(idx))); + return (T)static_cast<uintptr_t>(AsIntArray<kVerifyFlags>()->GetWithoutChecks(idx)); } template<bool kTransactionActive, bool kUnchecked> @@ -255,12 +253,12 @@ inline void PointerArray::SetElementPtrSize(uint32_t idx, T* element, PointerSiz ptr_size); } -template <VerifyObjectFlags kVerifyFlags, ReadBarrierOption kReadBarrierOption, typename Visitor> +template <VerifyObjectFlags kVerifyFlags, typename Visitor> inline void PointerArray::Fixup(mirror::PointerArray* dest, PointerSize pointer_size, const Visitor& visitor) { for (size_t i = 0, count = GetLength(); i < count; ++i) { - void* ptr = GetElementPtrSize<void*, kVerifyFlags, kReadBarrierOption>(i, pointer_size); + void* ptr = GetElementPtrSize<void*, kVerifyFlags>(i, pointer_size); void* new_ptr = visitor(ptr); if (ptr != new_ptr) { dest->SetElementPtrSize<false, true>(i, new_ptr, pointer_size); |