< prev index next >
src/hotspot/share/memory/oopFactory.cpp
Print this page
@@ -39,10 +39,12 @@
#include "oops/oop.inline.hpp"
#include "oops/typeArrayKlass.hpp"
#include "oops/typeArrayOop.inline.hpp"
#include "oops/valueKlass.hpp"
#include "oops/valueArrayKlass.hpp"
+#include "oops/valueArrayOop.inline.hpp"
+#include "oops/valueArrayOop.hpp"
#include "runtime/handles.inline.hpp"
#include "utilities/utf8.hpp"
typeArrayOop oopFactory::new_boolArray(int length, TRAPS) {
return TypeArrayKlass::cast(Universe::boolArrayKlassObj())->allocate(length, THREAD);
@@ -145,10 +147,27 @@
}
assert(oop->array_storage_properties().is_null_free(), "Bad array storage encoding");
return oop;
}
+objArrayHandle oopFactory::copy_valueArray_to_objArray(valueArrayHandle array, TRAPS) {
+ int len = array->length();
+ ValueArrayKlass* vak = ValueArrayKlass::cast(array->klass());
+ objArrayHandle oarray = new_objArray_handle(vak->element_klass(),
+ array->length(), CHECK_(objArrayHandle()));
+ vak->copy_array(array(), 0, oarray(), 0, len, CHECK_(objArrayHandle()));
+ return oarray;
+}
+
+objArrayHandle oopFactory::ensure_objArray(oop array, TRAPS) {
+ if (array != NULL && array->is_valueArray()) {
+ return copy_valueArray_to_objArray(valueArrayHandle(THREAD, valueArrayOop(array)), THREAD);
+ } else {
+ return objArrayHandle(THREAD, objArrayOop(array));
+ }
+}
+
objArrayHandle oopFactory::new_objArray_handle(Klass* klass, int length, TRAPS) {
objArrayOop obj = new_objArray(klass, length, CHECK_(objArrayHandle()));
return objArrayHandle(THREAD, obj);
}
< prev index next >