[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