[vmkit-commits] [vmkit] r144193 - /vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
Will Dietz
wdietz2 at illinois.edu
Wed Nov 9 10:16:11 PST 2011
Author: wdietz2
Date: Wed Nov 9 12:16:11 2011
New Revision: 144193
URL: http://llvm.org/viewvc/llvm-project?rev=144193&view=rev
Log:
Impl JVM_NewArray.
Modified:
vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
Modified: vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc?rev=144193&r1=144192&r2=144193&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc (original)
+++ vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc Wed Nov 9 12:16:11 2011
@@ -828,7 +828,56 @@
JNIEXPORT jobject JNICALL
JVM_NewArray(JNIEnv *env, jclass eltClass, jint length) {
- NYI();
+ JavaObject* res = 0;
+ JavaObject* eltClassObj = 0;
+ llvm_gcroot(res, 0);
+ llvm_gcroot(eltClassObj, 0);
+
+ BEGIN_JNI_EXCEPTION
+
+ Jnjvm* vm = th->getJVM();
+ if (length < 0) vm->negativeArraySizeException(length);
+
+ eltClassObj = *(JavaObject**)eltClass;
+ UserCommonClass* base =
+ UserCommonClass::resolvedImplClass(vm, eltClassObj, true);
+ JnjvmClassLoader* loader = base->classLoader;
+ const UTF8* name = base->getName();
+ const UTF8* arrayName = loader->constructArrayName(1, name);
+ if (base->isPrimitive()) {
+ UserClassArray *array = 0;
+ if (base == vm->upcalls->OfBool) {
+ array = vm->upcalls->ArrayOfBool;
+ } else if (base == vm->upcalls->OfByte) {
+ array = vm->upcalls->ArrayOfByte;
+ } else if (base == vm->upcalls->OfShort) {
+ array = vm->upcalls->ArrayOfShort;
+ } else if (base == vm->upcalls->OfChar) {
+ array = vm->upcalls->ArrayOfChar;
+ } else if (base == vm->upcalls->OfInt) {
+ array = vm->upcalls->ArrayOfInt;
+ } else if (base == vm->upcalls->OfFloat) {
+ array = vm->upcalls->ArrayOfFloat;
+ } else if (base == vm->upcalls->OfLong) {
+ array = vm->upcalls->ArrayOfLong;
+ } else if (base == vm->upcalls->OfDouble) {
+ array = vm->upcalls->ArrayOfDouble;
+ } else {
+ vm->illegalArgumentException("Invalid array primitive type!");
+ abort();
+ }
+ res = (JavaObject*)array->doNew(length, vm);
+ } else {
+ UserClassArray* array = loader->constructArray(arrayName, base);
+ res = (JavaObject*)array->doNew(length, vm);
+ }
+
+ jobject ret = (jobject)th->pushJNIRef(res);
+ RETURN_FROM_JNI(ret);
+
+ END_JNI_EXCEPTION
+
+ return 0;
}
JNIEXPORT jobject JNICALL
More information about the vmkit-commits
mailing list