[vmkit-commits] [PATCH] OpenJDK.inc: Implement JVM_FindPrimitiveClass

Nicolas Geoffray nicolas.geoffray at gmail.com
Thu Oct 27 09:57:20 PDT 2011


Looks good!

On Thu, Oct 27, 2011 at 3:56 AM, Will Dietz <wdietz2 at illinois.edu> wrote:

> 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
> _______________________________________________
> vmkit-commits mailing list
> vmkit-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/vmkit-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/vmkit-commits/attachments/20111027/195ffa3b/attachment.html>


More information about the vmkit-commits mailing list