diff options
| author | 2017-01-24 15:32:25 -0800 | |
|---|---|---|
| committer | 2017-01-25 09:58:30 -0800 | |
| commit | 440b5d9bffafa46366f58599414e0cff35ea3a6a (patch) | |
| tree | 033967c68fff98790ba2ef6f84e31bcea36acbf0 /runtime/mirror/array-inl.h | |
| parent | f34077c96af3389e8eae65252d4c5d51cf630039 (diff) | |
Implement class-pre-define time redefinition.
This allows one to redefine classes as they are being loaded without
restriction as to the types of transformations that may be included.
For example one is allowed to add additional methods or fields to the
class being defined.
Bug: 31684920
Test: mma -j40 test-art-host
Change-Id: I671ee13444c05f28424e727fd80d9d46c78ca287
Diffstat (limited to 'runtime/mirror/array-inl.h')
| -rw-r--r-- | runtime/mirror/array-inl.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/runtime/mirror/array-inl.h b/runtime/mirror/array-inl.h index a5db0c0a8a..f56226bd98 100644 --- a/runtime/mirror/array-inl.h +++ b/runtime/mirror/array-inl.h @@ -207,6 +207,19 @@ inline void PrimitiveArray<T>::VisitRoots(RootVisitor* visitor) { } template<typename T> +inline PrimitiveArray<T>* PrimitiveArray<T>::AllocateAndFill(Thread* self, + const T* data, + size_t length) { + StackHandleScope<1> hs(self); + Handle<PrimitiveArray<T>> arr(hs.NewHandle(PrimitiveArray<T>::Alloc(self, length))); + if (!arr.IsNull()) { + // Copy it in. Just skip if it's null + memcpy(arr->GetData(), data, sizeof(T) * length); + } + return arr.Get(); +} + +template<typename T> inline PrimitiveArray<T>* PrimitiveArray<T>::Alloc(Thread* self, size_t length) { Array* raw_array = Array::Alloc<true>(self, GetArrayClass(), |