Implement JNI NewBooleanArray et cetera.
(Primitive types only. NewObjectArray to come...)
Change-Id: I2f54031d96062d666089c91ba40e16028ae21bd4
diff --git a/src/object.cc b/src/object.cc
index 34b0bb9..21f3537 100644
--- a/src/object.cc
+++ b/src/object.cc
@@ -5,6 +5,7 @@
#include <string.h>
#include <algorithm>
+#include "class_linker.h"
#include "globals.h"
#include "heap.h"
#include "logging.h"
@@ -441,13 +442,29 @@
return NULL;
}
+template<typename T>
+PrimitiveArray<T>* PrimitiveArray<T>::Alloc(size_t length) {
+ Array* raw_array = Array::Alloc(array_class_, length, sizeof(T));
+ return down_cast<PrimitiveArray<T>*>(raw_array);
+}
+
+template <typename T> Class* PrimitiveArray<T>::array_class_ = NULL;
+
+// Explicitly instantiate all the primitive array types.
+template class PrimitiveArray<uint8_t>; // BooleanArray
+template class PrimitiveArray<int8_t>; // ByteArray
+template class PrimitiveArray<uint16_t>; // CharArray
+template class PrimitiveArray<double>; // DoubleArray
+template class PrimitiveArray<float>; // FloatArray
+template class PrimitiveArray<int32_t>; // IntArray
+template class PrimitiveArray<int64_t>; // LongArray
+template class PrimitiveArray<int16_t>; // ShortArray
+
// TODO: get global references for these
Class* String::java_lang_String_ = NULL;
-Class* String::char_array_ = NULL;
-void String::InitClasses(Class* java_lang_String, Class* char_array) {
+void String::InitClasses(Class* java_lang_String) {
java_lang_String_ = java_lang_String;
- char_array_ = char_array;
}
static const char* kClassStatusNames[] = {