diff options
Diffstat (limited to 'runtime/mirror/array-inl.h')
| -rw-r--r-- | runtime/mirror/array-inl.h | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/runtime/mirror/array-inl.h b/runtime/mirror/array-inl.h index a6a5ba298c..40507e7aee 100644 --- a/runtime/mirror/array-inl.h +++ b/runtime/mirror/array-inl.h @@ -224,14 +224,23 @@ inline void PrimitiveArray<T>::Memcpy(int32_t dst_pos, } } +template<typename T, PointerSize kPointerSize, VerifyObjectFlags kVerifyFlags> +inline T PointerArray::GetElementPtrSize(uint32_t idx) { + // C style casts here since we sometimes have T be a pointer, or sometimes an integer + // (for stack traces). + if (kPointerSize == PointerSize::k64) { + return (T)static_cast<uintptr_t>(AsLongArray<kVerifyFlags>()->GetWithoutChecks(idx)); + } + return (T)static_cast<uintptr_t>(AsIntArray<kVerifyFlags>()->GetWithoutChecks(idx)); +} 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>()->GetWithoutChecks(idx)); + return GetElementPtrSize<T, PointerSize::k64, kVerifyFlags>(idx); } - return (T)static_cast<uintptr_t>(AsIntArray<kVerifyFlags>()->GetWithoutChecks(idx)); + return GetElementPtrSize<T, PointerSize::k32, kVerifyFlags>(idx); } template<bool kTransactionActive, bool kUnchecked> |