[vmkit-commits] [vmkit] r143131 - /vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
Will Dietz
wdietz2 at illinois.edu
Thu Oct 27 12:17:04 PDT 2011
Author: wdietz2
Date: Thu Oct 27 14:17:04 2011
New Revision: 143131
URL: http://llvm.org/viewvc/llvm-project?rev=143131&view=rev
Log:
OpenJDK.inc: Implement JVM_FindPrimitiveClass
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=143131&r1=143130&r2=143131&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc (original)
+++ vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc Thu Oct 27 14:17:04 2011
@@ -554,9 +554,50 @@
* utf: class name
*/
+
+const struct {
+ const char * name;
+ char id;
+} static PrimMap[] = {
+ { "boolean", 'Z' },
+ { "byte" , 'B' },
+ { "char" , 'C' },
+ { "short" , 'S' },
+ { "int" , 'I' },
+ { "long" , 'J' },
+ { "float" , 'F' },
+ { "double" , 'D' },
+ { "void" , 'V' }
+};
+const static unsigned PrimMapSize = sizeof(PrimMap)/sizeof(PrimMap[0]);
+
JNIEXPORT jclass JNICALL
JVM_FindPrimitiveClass(JNIEnv *env, const char *utf) {
- NYI();
+ JavaObject* res = 0;
+ llvm_gcroot(res, 0);
+
+ BEGIN_JNI_EXCEPTION
+
+ Jnjvm* vm = JavaThread::get()->getJVM();
+
+ UserClassPrimitive * prim = 0;
+ for(unsigned i = 0; i < PrimMapSize; ++i) {
+ if(!strcmp(PrimMap[i].name, utf)) {
+ prim = UserClassPrimitive::byteIdToPrimitive(PrimMap[i].id, vm->upcalls);
+ break;
+ }
+ }
+ if (!prim) {
+ fprintf(stderr, "Unsupported primitive \"%s\"! Missing table entry?\n", utf);
+ }
+ assert(prim && "Invalid Primitive in JVM_FindPrimitiveClass");
+
+ res = (JavaObject*)prim->getClassDelegateePtr(vm);
+ RETURN_FROM_JNI((jclass)res);
+
+ END_JNI_EXCEPTION
+
+ return 0;
}
/*
More information about the vmkit-commits
mailing list