[vmkit-commits] [PATCH] OpenJDK.inc: Implement JVM_FindPrimitiveClass
Will Dietz
wdietz2 at illinois.edu
Wed Oct 26 18:56:58 PDT 2011
Inlined below.
~Will
>From e25a607974c98c8c01107ac3a72b666160f0023c Mon Sep 17 00:00:00 2001
From: Will Dietz <w at wdtz.org>
Date: Wed, 26 Oct 2011 20:52:26 -0500
Subject: [PATCH 1/3] OpenJDK.inc: Implement JVM_FindPrimitiveClass
---
lib/J3/ClassLib/OpenJDK/OpenJDK.inc | 43 ++++++++++++++++++++++++++++++++++-
1 files changed, 42 insertions(+), 1 deletions(-)
diff --git a/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
b/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
index e5690a5..2380abd 100644
--- a/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
+++ b/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
@@ -549,9 +549,50 @@ JVM_GetCallerClass(JNIEnv *env, int n) {
* 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;
}
/*
--
1.7.5.1
More information about the vmkit-commits
mailing list