<div>Looks good, with two comments.</div><div><br></div>On Mon, Nov 7, 2011 at 9:28 PM, Will Dietz <span dir="ltr"><<a href="mailto:wdietz2@illinois.edu">wdietz2@illinois.edu</a>></span> wrote:<br><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Inlined below.<br>
<br>
~Will<br>
<br>
>From 32f5d8efb6c9908c9bb36cdee3facfc3c91a7bf4 Mon Sep 17 00:00:00 2001<br>
From: Will Dietz <<a href="mailto:w@wdtz.org">w@wdtz.org</a>><br>
Date: Sat, 5 Nov 2011 14:55:48 -0500<br>
Subject: [PATCH 3/3] Impl JVM_NewArray.<br>
<br>
---<br>
 lib/J3/ClassLib/OpenJDK/OpenJDK.inc |   49 ++++++++++++++++++++++++++++++++++-<br>
 1 files changed, 48 insertions(+), 1 deletions(-)<br>
<br>
diff --git a/lib/J3/ClassLib/OpenJDK/OpenJDK.inc<br>
b/lib/J3/ClassLib/OpenJDK/OpenJDK.inc<br>
index b86b56f..6342cfe 100644<br>
--- a/lib/J3/ClassLib/OpenJDK/OpenJDK.inc<br>
+++ b/lib/J3/ClassLib/OpenJDK/OpenJDK.inc<br>
@@ -830,7 +830,54 @@ JVM_SetPrimitiveArrayElement(JNIEnv *env, jobject<br>
arr, jint index, jvalue v,<br>
<br>
 JNIEXPORT jobject JNICALL<br>
 JVM_NewArray(JNIEnv *env, jclass eltClass, jint length) {<br>
-  NYI();<br>
+  ArrayObject * res = 0;<br>
+  llvm_gcroot(res, 0);<br>
+<br>
+  BEGIN_JNI_EXCEPTION<br>
+<br>
+  Jnjvm* vm = th->getJVM();<br>
+  if (length < 0) vm->negativeArraySizeException(length);<br>
+<br>
+  JavaObject * eltClassObj = *(JavaObject**)eltClass;<br></blockquote><div><br></div><div>Add eltClassObj as gc_root at the top of the method.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

+  UserCommonClass* base =<br>
+    UserCommonClass::resolvedImplClass(vm, eltClassObj, true);<br>
+  JnjvmClassLoader* loader = base->classLoader;<br>
+  const UTF8* name = base->getName();<br>
+  const UTF8* arrayName = loader->constructArrayName(1, name);<br>
+  if (base->isPrimitive()) {<br>
+    UserClassArray *array = 0;<br>
+    if (base == vm->upcalls->OfBool) {<br>
+      array = vm->upcalls->ArrayOfBool;<br>
+    } else if (base == vm->upcalls->OfByte) {<br>
+      array = vm->upcalls->ArrayOfByte;<br>
+    } else if (base == vm->upcalls->OfShort) {<br>
+      array = vm->upcalls->ArrayOfShort;<br>
+    } else if (base == vm->upcalls->OfChar) {<br>
+      array = vm->upcalls->ArrayOfChar;<br>
+    } else if (base == vm->upcalls->OfInt) {<br>
+      array = vm->upcalls->ArrayOfInt;<br>
+    } else if (base == vm->upcalls->OfFloat) {<br>
+      array = vm->upcalls->ArrayOfFloat;<br>
+    } else if (base == vm->upcalls->OfLong) {<br>
+      array = vm->upcalls->ArrayOfLong;<br>
+    } else if (base == vm->upcalls->OfDouble) {<br>
+      array = vm->upcalls->ArrayOfDouble;<br>
+    } else {<br>
+      vm->illegalArgumentException("Invalid array primitive type!");<br>
+      abort();<br>
+    }<br>
+    res = (ArrayObject*)array->doNew(length, vm);<br></blockquote><div><br></div><div>'res' should be typed JavaObject. A primitive array is not a ArrayObject.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

+  } else {<br>
+    UserClassArray* array = loader->constructArray(arrayName, base);<br>
+    res = (ArrayObject*)array->doNew(length, vm);<br>
+  }<br>
+<br>
+  jobject ret = (jobject)th->pushJNIRef(res);<br>
+  RETURN_FROM_JNI(ret);<br>
+<br>
+  END_JNI_EXCEPTION<br>
+<br>
+  return 0;<br>
 }<br>
<br>
 JNIEXPORT jobject JNICALL<br>
<span class="HOEnZb"><font color="#888888">--<br>
1.7.5.1<br>
_______________________________________________<br>
vmkit-commits mailing list<br>
<a href="mailto:vmkit-commits@cs.uiuc.edu">vmkit-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/vmkit-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/vmkit-commits</a><br>
</font></span></blockquote></div><br>