< 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 >