commit-classpath
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

libclasspath reformatting patch (was: Re: fix const/non-const warnings i


From: Steven Augart
Subject: libclasspath reformatting patch (was: Re: fix const/non-const warnings in jcl.c, jcl.h)
Date: Mon, 21 Jun 2004 15:01:03 -0400
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.5) Gecko/20031007

Michael Koch wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Am Montag, 21. Juni 2004 19:38 schrieb Steven Augart:

2004-06-20  Steven Augart <address@hidden>

       * native/jni/classpath/jcl.c, native/jni/classpath/jcl.h
       (JCL_FindClass): Fixed const/non-const warning in function
prototype. (JCL_ThrowException): Ditto.
       (JCL_free_cstring): Fixed logical const/non-const problem
in function prototype.

       * native/jni/classpath/jcl.c: Reformatted according to GNU
standards.


Can you provide two patches, one for functional changes and one for the reformatting ? This makes it easier later to track changes.

That is indeed a better idea.

I'm attaching the patch for reformatting first.

Will submit the other one shortly. I hate having multiple patches to the same file outstanding; whine whine.

--Steve Augart

--
Steven Augart

Jikes RVM, a free, open source, Virtual Machine:
http://oss.software.ibm.com/jikesrvm
OK to commit?  Thanks to Michael Koch for pointing out that this
should be done separately from any substantive changes.

2004-06-21  Steven Augart <address@hidden>

        * native/jni/classpath/jcl.c, native/jni/classpath/jcl.h,
        native/jni/classpath/jnilink.c, native/jni/classpath/jnilink.h,
        native/jni/classpath/native_state.c, 
        native/jni/classpath/native_state.h,
        native/jni/classpath/primlib.c, native/jni/classpath/primlib.h:
        Reformatted according to GNU Coding standards.

Index: native/jni/classpath/jcl.c
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/classpath/jcl.c,v
retrieving revision 1.8
diff -I*.class -u -r1.8 jcl.c
--- native/jni/classpath/jcl.c  29 Mar 2004 07:07:26 -0000      1.8
+++ native/jni/classpath/jcl.c  21 Jun 2004 18:58:31 -0000
@@ -43,106 +43,138 @@
 #include <jcl.h>
 
 #ifndef __GNUC__
-#define __attribute__(x) /* nothing */
+#define __attribute__(x)       /* nothing */
 #endif
 
-JNIEXPORT void JNICALL JCL_ThrowException(JNIEnv * env, char * className, char 
* errMsg) {
-       jclass excClass;
-       if((*env)->ExceptionOccurred(env)) {
-               (*env)->ExceptionClear(env);
-       }
-       excClass = (*env)->FindClass(env, className);
-       if(excClass == NULL) {
-               jclass errExcClass;
-               errExcClass = (*env)->FindClass(env, 
"java/lang/ClassNotFoundException");
-               if(errExcClass == NULL) {
-                       errExcClass = (*env)->FindClass(env, 
"java/lang/InternalError");
-                       if(errExcClass == NULL) {
-                               fprintf(stderr, "JCL: Utterly failed to throw 
exeption ");
-                               fprintf(stderr, className);
-                               fprintf(stderr, " with message ");
-                               fprintf(stderr, errMsg);
-                               return;
-                       }
-               }
-               /* Removed this (more comprehensive) error string to avoid the 
need for a 
-                * static variable or allocation of a buffer for this message 
in this (unlikely) 
-                * error case. --Fridi. 
-                *
-                * sprintf(errstr,"JCL: Failed to throw exception %s with 
message %s: could not find exception class.", className, errMsg); 
-                */
-               (*env)->ThrowNew(env, errExcClass, className);
-       }
-       (*env)->ThrowNew(env, excClass, errMsg);
+JNIEXPORT void JNICALL
+JCL_ThrowException (JNIEnv * env, char *className, char *errMsg)
+{
+  jclass excClass;
+  if ((*env)->ExceptionOccurred (env))
+    {
+      (*env)->ExceptionClear (env);
+    }
+  excClass = (*env)->FindClass (env, className);
+  if (excClass == NULL)
+    {
+      jclass errExcClass;
+      errExcClass =
+       (*env)->FindClass (env, "java/lang/ClassNotFoundException");
+      if (errExcClass == NULL)
+       {
+         errExcClass = (*env)->FindClass (env, "java/lang/InternalError");
+         if (errExcClass == NULL)
+           {
+             fprintf (stderr, "JCL: Utterly failed to throw exeption ");
+             fprintf (stderr, className);
+             fprintf (stderr, " with message ");
+             fprintf (stderr, errMsg);
+             return;
+           }
+       }
+      /* Removed this (more comprehensive) error string to avoid the need for 
a 
+       * static variable or allocation of a buffer for this message in this 
(unlikely) 
+       * error case. --Fridi. 
+       *
+       * sprintf(errstr,"JCL: Failed to throw exception %s with message %s: 
could not find exception class.", className, errMsg); 
+       */
+      (*env)->ThrowNew (env, errExcClass, className);
+    }
+  (*env)->ThrowNew (env, excClass, errMsg);
 }
 
-JNIEXPORT void * JNICALL JCL_malloc(JNIEnv * env, size_t size) {
-       void * mem = malloc(size);
-       if(mem == NULL) {
-               JCL_ThrowException(env, "java/lang/OutOfMemoryError", "malloc() 
failed.");
-               return NULL;
-       }
-       return mem;
+JNIEXPORT void *JNICALL
+JCL_malloc (JNIEnv * env, size_t size)
+{
+  void *mem = malloc (size);
+  if (mem == NULL)
+    {
+      JCL_ThrowException (env, "java/lang/OutOfMemoryError",
+                         "malloc() failed.");
+      return NULL;
+    }
+  return mem;
 }
 
-JNIEXPORT void * JNICALL JCL_realloc(JNIEnv *env, void *ptr, size_t size)
+JNIEXPORT void *JNICALL
+JCL_realloc (JNIEnv * env, void *ptr, size_t size)
 {
-  ptr = realloc(ptr, size);
+  ptr = realloc (ptr, size);
   if (ptr == 0)
     {
-      JCL_ThrowException(env, "java/lang/OutOfMemoryError",
-                             "malloc() failed.");
+      JCL_ThrowException (env, "java/lang/OutOfMemoryError",
+                         "malloc() failed.");
       return NULL;
     }
-  return(ptr);
+  return (ptr);
 }
 
-JNIEXPORT void JNICALL JCL_free(JNIEnv * env __attribute__((unused)),
-                               void * p)
+JNIEXPORT void JNICALL
+JCL_free (JNIEnv * env __attribute__ ((unused)), void *p)
 {
-       if(p != NULL) {
-               free(p);
-       }
+  if (p != NULL)
+    {
+      free (p);
+    }
 }
 
-JNIEXPORT const char * JNICALL JCL_jstring_to_cstring(JNIEnv * env, jstring s) 
{
-       const char* cstr;
-       if(s == NULL) {
-               JCL_ThrowException(env, "java/lang/NullPointerException","Null 
string");
-               return NULL;
-       }
-       cstr = (const char*)(*env)->GetStringUTFChars(env, s, NULL);
-       if(cstr == NULL) {
-               JCL_ThrowException(env, "java/lang/InternalError", 
"GetStringUTFChars() failed.");
-               return NULL;
-       }
-       return cstr;
+JNIEXPORT const char *JNICALL
+JCL_jstring_to_cstring (JNIEnv * env, jstring s)
+{
+  const char *cstr;
+  if (s == NULL)
+    {
+      JCL_ThrowException (env, "java/lang/NullPointerException",
+                         "Null string");
+      return NULL;
+    }
+  cstr = (const char *) (*env)->GetStringUTFChars (env, s, NULL);
+  if (cstr == NULL)
+    {
+      JCL_ThrowException (env, "java/lang/InternalError",
+                         "GetStringUTFChars() failed.");
+      return NULL;
+    }
+  return cstr;
 }
 
-JNIEXPORT void JNICALL JCL_free_cstring(JNIEnv * env, jstring s, const char * 
cstr) {
-       (*env)->ReleaseStringUTFChars(env, s, cstr);
+JNIEXPORT void JNICALL
+JCL_free_cstring (JNIEnv * env, jstring s, const char *cstr)
+{
+  (*env)->ReleaseStringUTFChars (env, s, cstr);
 }
 
-JNIEXPORT jint JNICALL JCL_MonitorEnter(JNIEnv * env, jobject o) {
-       jint retval = (*env)->MonitorEnter(env,o);
-       if(retval != 0) {
-               JCL_ThrowException(env, "java/lang/InternalError", 
"MonitorEnter() failed.");
-       }
-       return retval;
+JNIEXPORT jint JNICALL
+JCL_MonitorEnter (JNIEnv * env, jobject o)
+{
+  jint retval = (*env)->MonitorEnter (env, o);
+  if (retval != 0)
+    {
+      JCL_ThrowException (env, "java/lang/InternalError",
+                         "MonitorEnter() failed.");
+    }
+  return retval;
 }
 
-JNIEXPORT jint JNICALL JCL_MonitorExit(JNIEnv * env, jobject o) {
-       jint retval = (*env)->MonitorExit(env,o);
-       if(retval != 0) {
-               JCL_ThrowException(env, "java/lang/InternalError", 
"MonitorExit() failed.");
-       }
-       return retval;
+JNIEXPORT jint JNICALL
+JCL_MonitorExit (JNIEnv * env, jobject o)
+{
+  jint retval = (*env)->MonitorExit (env, o);
+  if (retval != 0)
+    {
+      JCL_ThrowException (env, "java/lang/InternalError",
+                         "MonitorExit() failed.");
+    }
+  return retval;
 }
 
-JNIEXPORT jclass JNICALL JCL_FindClass(JNIEnv * env, char * className) {
-       jclass retval = (*env)->FindClass(env,className);
-       if(retval == NULL) {
-               JCL_ThrowException(env, "java/lang/ClassNotFoundException", 
className);
-       }
-       return retval;
+JNIEXPORT jclass JNICALL
+JCL_FindClass (JNIEnv * env, char *className)
+{
+  jclass retval = (*env)->FindClass (env, className);
+  if (retval == NULL)
+    {
+      JCL_ThrowException (env, "java/lang/ClassNotFoundException", className);
+    }
+  return retval;
 }
Index: native/jni/classpath/jcl.h
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/classpath/jcl.h,v
retrieving revision 1.6
diff -I*.class -u -r1.6 jcl.h
--- native/jni/classpath/jcl.h  29 Mar 2004 07:07:26 -0000      1.6
+++ native/jni/classpath/jcl.h  21 Jun 2004 18:58:31 -0000
@@ -42,15 +42,18 @@
 #include <jni.h>
 #include <config.h>
 
-JNIEXPORT jclass JNICALL JCL_FindClass(JNIEnv * env, char * className);
-JNIEXPORT void JNICALL JCL_ThrowException(JNIEnv * env, char * className, char 
* errMsg);
-JNIEXPORT void * JNICALL JCL_malloc(JNIEnv *env, size_t size);
-JNIEXPORT void * JNICALL JCL_realloc(JNIEnv *env, void *ptr, size_t size);
-JNIEXPORT void JNICALL JCL_free(JNIEnv *env, void * p);
-JNIEXPORT const char * JNICALL JCL_jstring_to_cstring(JNIEnv *env, jstring s);
-JNIEXPORT void JNICALL JCL_free_cstring(JNIEnv *env, jstring s, const char * 
cstr);
-JNIEXPORT jint JNICALL JCL_MonitorEnter(JNIEnv *env, jobject o);
-JNIEXPORT jint JNICALL JCL_MonitorExit(JNIEnv *env, jobject o);
+JNIEXPORT jclass JNICALL JCL_FindClass (JNIEnv * env, char *className);
+JNIEXPORT void JNICALL JCL_ThrowException (JNIEnv * env, char *className,
+                                          char *errMsg);
+JNIEXPORT void *JNICALL JCL_malloc (JNIEnv * env, size_t size);
+JNIEXPORT void *JNICALL JCL_realloc (JNIEnv * env, void *ptr, size_t size);
+JNIEXPORT void JNICALL JCL_free (JNIEnv * env, void *p);
+JNIEXPORT const char *JNICALL JCL_jstring_to_cstring (JNIEnv * env,
+                                                     jstring s);
+JNIEXPORT void JNICALL JCL_free_cstring (JNIEnv * env, jstring s,
+                                        const char *cstr);
+JNIEXPORT jint JNICALL JCL_MonitorEnter (JNIEnv * env, jobject o);
+JNIEXPORT jint JNICALL JCL_MonitorExit (JNIEnv * env, jobject o);
 
 #define JCL_RETHROW_EXCEPTION(env) if((*(env))->ExceptionOccurred((env)) != 
NULL) return NULL;
 
Index: native/jni/classpath/jnilink.c
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/classpath/jnilink.c,v
retrieving revision 1.5
diff -I*.class -u -r1.5 jnilink.c
--- native/jni/classpath/jnilink.c      29 Mar 2004 07:07:26 -0000      1.5
+++ native/jni/classpath/jnilink.c      21 Jun 2004 18:58:31 -0000
@@ -45,60 +45,66 @@
 #define GETCLASS(c) *(jclass*)(c)
 
 JNIEXPORT jclass JNICALL
-LINK_RelinkClass     (JNIEnv * env, linkedClass * c, char * name) {
-       jclass found;
-       LINK_UnlinkClass(env,*c);
-
-       found = (*env)->FindClass(env,name);
-       if(found == NULL)
-               return NULL;
-
-       *c = JCL_malloc(env,sizeof(jclass));
-       if(*c == NULL)
-               return NULL;
+LINK_RelinkClass (JNIEnv * env, linkedClass * c, char *name)
+{
+  jclass found;
+  LINK_UnlinkClass (env, *c);
+
+  found = (*env)->FindClass (env, name);
+  if (found == NULL)
+    return NULL;
+
+  *c = JCL_malloc (env, sizeof (jclass));
+  if (*c == NULL)
+    return NULL;
 
-       GETCLASS(*c) = (*env)->NewGlobalRef(env,found);
-       return GETCLASS(*c);
+  GETCLASS (*c) = (*env)->NewGlobalRef (env, found);
+  return GETCLASS (*c);
 }
 
 JNIEXPORT jclass JNICALL
-LINK_RelinkKnownClass(JNIEnv * env, linkedClass * c, jclass newClass) {
-       LINK_UnlinkClass(env,*c);
+LINK_RelinkKnownClass (JNIEnv * env, linkedClass * c, jclass newClass)
+{
+  LINK_UnlinkClass (env, *c);
+
+  *c = JCL_malloc (env, sizeof (jclass));
+  if (*c == NULL)
+    return NULL;
 
-       *c = JCL_malloc(env,sizeof(jclass));
-       if(*c == NULL)
-               return NULL;
-
-       GETCLASS(*c) = (*env)->NewGlobalRef(env,newClass);
-       return newClass;
+  GETCLASS (*c) = (*env)->NewGlobalRef (env, newClass);
+  return newClass;
 }
 
 JNIEXPORT jmethodID JNICALL
-LINK_RelinkMethod      (JNIEnv * env, jmethodID * m, linkedClass c,
-                        char * name, char * sig) {
-       *m = (*env)->GetMethodID(env,GETCLASS(c),name,sig);
-       return *m;
+LINK_RelinkMethod (JNIEnv * env, jmethodID * m, linkedClass c,
+                  char *name, char *sig)
+{
+  *m = (*env)->GetMethodID (env, GETCLASS (c), name, sig);
+  return *m;
 }
 
 JNIEXPORT jmethodID JNICALL
-LINK_RelinkStaticMethod(JNIEnv * env, jmethodID * m, linkedClass c,
-                        char * name, char * sig) {
-       *m = (*env)->GetStaticMethodID(env,GETCLASS(c),name,sig);
-       return *m;
+LINK_RelinkStaticMethod (JNIEnv * env, jmethodID * m, linkedClass c,
+                        char *name, char *sig)
+{
+  *m = (*env)->GetStaticMethodID (env, GETCLASS (c), name, sig);
+  return *m;
 }
 
 JNIEXPORT jfieldID JNICALL
-LINK_RelinkField       (JNIEnv * env, jfieldID * f, linkedClass c,
-                        char * name, char * sig) {
-       *f = (*env)->GetFieldID(env,GETCLASS(c),name,sig);
-       return *f;
+LINK_RelinkField (JNIEnv * env, jfieldID * f, linkedClass c,
+                 char *name, char *sig)
+{
+  *f = (*env)->GetFieldID (env, GETCLASS (c), name, sig);
+  return *f;
 }
 
 JNIEXPORT jfieldID JNICALL
 LINK_RelinkStaticField (JNIEnv * env, jfieldID * f, linkedClass c,
-                        char * name, char * sig) {
-       *f = (*env)->GetStaticFieldID(env,GETCLASS(c),name,sig);
-       return *f;
+                       char *name, char *sig)
+{
+  *f = (*env)->GetStaticFieldID (env, GETCLASS (c), name, sig);
+  return *f;
 }
 
 
@@ -106,12 +112,14 @@
 destroys any object references
  * the linker might have kept around.
  */
-JNIEXPORT void JNICALL LINK_UnlinkClass       (JNIEnv * env, linkedClass * c) {
-       if(*c != NULL) {
-               if(GETCLASS(*c) != NULL)
-                       (*env)->DeleteGlobalRef(env,GETCLASS(*c));
-               JCL_free(env,*c);
-               *c = NULL;
-       }
+JNIEXPORT void JNICALL
+LINK_UnlinkClass (JNIEnv * env, linkedClass * c)
+{
+  if (*c != NULL)
+    {
+      if (GETCLASS (*c) != NULL)
+       (*env)->DeleteGlobalRef (env, GETCLASS (*c));
+      JCL_free (env, *c);
+      *c = NULL;
+    }
 }
-
Index: native/jni/classpath/jnilink.h
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/classpath/jnilink.h,v
retrieving revision 1.4
diff -I*.class -u -r1.4 jnilink.h
--- native/jni/classpath/jnilink.h      29 Mar 2004 07:07:26 -0000      1.4
+++ native/jni/classpath/jnilink.h      21 Jun 2004 18:58:31 -0000
@@ -41,7 +41,7 @@
 
 #include <jni.h>
 
-typedef void* linkedClass;
+typedef void *linkedClass;
 
 #define LINK_LinkClass(env,c,name)              ((c)==NULL ? 
LINK_ReallyLinkClass((env),&(c),(name)) : (c))
 #define LINK_LinkKnownClass(env,c,newClass)     ((c)==NULL ? 
LINK_ReallyLinkKnownClass((env),&(c),(newClass)) : (c))
@@ -53,34 +53,30 @@
 #define LINK_LinkConstructor(env,m,c,sig)       ((m)==NULL ? 
LINK_RelinkMethod((env),&(m),(c),"<init>",(sig)) : (m))
 
 JNIEXPORT jclass JNICALL
-LINK_ReallyLinkClass     (JNIEnv * env, linkedClass * c,
-                          char * name);
+LINK_ReallyLinkClass (JNIEnv * env, linkedClass * c, char *name);
 JNIEXPORT jclass JNICALL
-LINK_ReallyLinkKnownClass(JNIEnv * env, linkedClass * c,
-                          jclass newClass);
+LINK_ReallyLinkKnownClass (JNIEnv * env, linkedClass * c, jclass newClass);
 JNIEXPORT jclass JNICALL
-LINK_RelinkClass       (JNIEnv * env, linkedClass * c,
-                        char * name);
+LINK_RelinkClass (JNIEnv * env, linkedClass * c, char *name);
 JNIEXPORT jclass JNICALL
-LINK_RelinkKnownClass  (JNIEnv * env, linkedClass * c,
-                        jclass newClass);
+LINK_RelinkKnownClass (JNIEnv * env, linkedClass * c, jclass newClass);
 JNIEXPORT jmethodID JNICALL
-LINK_RelinkMethod      (JNIEnv * env, jmethodID * m, linkedClass c,
-                        char * name, char * sig);
+LINK_RelinkMethod (JNIEnv * env, jmethodID * m, linkedClass c,
+                  char *name, char *sig);
 JNIEXPORT jmethodID JNICALL
-LINK_RelinkStaticMethod(JNIEnv * env, jmethodID * m, linkedClass c,
-                        char * name, char * sig);
+LINK_RelinkStaticMethod (JNIEnv * env, jmethodID * m, linkedClass c,
+                        char *name, char *sig);
 JNIEXPORT jfieldID JNICALL
-LINK_RelinkField       (JNIEnv * env, jfieldID * f, linkedClass c,
-                        char * name, char * sig);
+LINK_RelinkField (JNIEnv * env, jfieldID * f, linkedClass c,
+                 char *name, char *sig);
 JNIEXPORT jfieldID JNICALL
 LINK_RelinkStaticField (JNIEnv * env, jfieldID * f, linkedClass c,
-                        char * name, char * sig);
+                       char *name, char *sig);
 
 /* These are for when the class referencing the symbols is unloaded; it
 destroys any object references
  * the linker might have kept around.
  */
-JNIEXPORT void JNICALL LINK_UnlinkClass       (JNIEnv * env, linkedClass * c);
+JNIEXPORT void JNICALL LINK_UnlinkClass (JNIEnv * env, linkedClass * c);
 
 #endif
Index: native/jni/classpath/native_state.c
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/classpath/native_state.c,v
retrieving revision 1.7
diff -I*.class -u -r1.7 native_state.c
--- native/jni/classpath/native_state.c 29 Mar 2004 07:07:26 -0000      1.7
+++ native/jni/classpath/native_state.c 21 Jun 2004 18:58:31 -0000
@@ -42,7 +42,7 @@
 #define DEFAULT_TABLE_SIZE 97
 
 struct state_table *
-init_state_table_with_size (JNIEnv *env, jclass clazz, jint size)
+init_state_table_with_size (JNIEnv * env, jclass clazz, jint size)
 {
   struct state_table *table;
   jfieldID hash;
@@ -61,13 +61,13 @@
   table->head = (struct state_node **) calloc (sizeof (struct state_node *),
                                               table->size);
   table->hash = hash;
-  table->clazz = clazz_g; 
+  table->clazz = clazz_g;
 
   return table;
 }
 
 struct state_table *
-init_state_table (JNIEnv *env, jclass clazz)
+init_state_table (JNIEnv * env, jclass clazz)
 {
   return init_state_table_with_size (env, clazz, DEFAULT_TABLE_SIZE);
 }
@@ -97,7 +97,7 @@
 
   return NULL;
 }
-           
+
 static void *
 get_node (struct state_node **head, jint obj_id)
 {
@@ -119,7 +119,7 @@
          /* Return the match.  */
          return node->c_state;
        }
-  
+
       back_ptr = node;
       node = node->next;
     }
@@ -127,7 +127,7 @@
   return NULL;
 }
 
-static void 
+static void
 add_node (struct state_node **head, jint obj_id, void *state)
 {
   struct state_node *node = *head;
@@ -137,7 +137,7 @@
 
   if (node != NULL)
     {
-      while (node->next != NULL && obj_id != node->key) 
+      while (node->next != NULL && obj_id != node->key)
        {
          back_ptr = node;
          node = node->next;
@@ -164,12 +164,12 @@
   *head = new_node;
 }
 
-void 
-set_state_oid (JNIEnv *env, jobject lock, struct state_table *table, 
+void
+set_state_oid (JNIEnv * env, jobject lock, struct state_table *table,
               jint obj_id, void *state)
 {
   jint hash;
-  
+
   hash = obj_id % table->size;
 
   (*env)->MonitorEnter (env, lock);
@@ -178,12 +178,12 @@
 }
 
 void *
-get_state_oid (JNIEnv *env, jobject lock, struct state_table *table,
+get_state_oid (JNIEnv * env, jobject lock, struct state_table *table,
               jint obj_id)
 {
   jint hash;
   void *return_value;
-  
+
   hash = obj_id % table->size;
 
   (*env)->MonitorEnter (env, lock);
@@ -194,12 +194,12 @@
 }
 
 void *
-remove_state_oid (JNIEnv *env, jobject lock, struct state_table *table,
+remove_state_oid (JNIEnv * env, jobject lock, struct state_table *table,
                  jint obj_id)
 {
   jint hash;
   void *return_value;
-  
+
   hash = obj_id % table->size;
 
   (*env)->MonitorEnter (env, lock);
@@ -210,7 +210,7 @@
 }
 
 int
-set_state (JNIEnv *env, jobject obj, struct state_table *table, void *state)
+set_state (JNIEnv * env, jobject obj, struct state_table *table, void *state)
 {
   jint obj_id;
   obj_id = (*env)->GetIntField (env, obj, table->hash);
@@ -223,7 +223,7 @@
 }
 
 void *
-get_state (JNIEnv *env, jobject obj, struct state_table *table)
+get_state (JNIEnv * env, jobject obj, struct state_table *table)
 {
   jint obj_id;
   obj_id = (*env)->GetIntField (env, obj, table->hash);
@@ -235,7 +235,7 @@
 }
 
 void *
-remove_state_slot (JNIEnv *env, jobject obj, struct state_table *table)
+remove_state_slot (JNIEnv * env, jobject obj, struct state_table *table)
 {
   jint obj_id;
   obj_id = (*env)->GetIntField (env, obj, table->hash);
Index: native/jni/classpath/native_state.h
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/classpath/native_state.h,v
retrieving revision 1.4
diff -I*.class -u -r1.4 native_state.h
--- native/jni/classpath/native_state.h 29 Mar 2004 07:07:26 -0000      1.4
+++ native/jni/classpath/native_state.h 21 Jun 2004 18:58:31 -0000
@@ -55,17 +55,17 @@
   struct state_node *next;
 };
 
-struct state_table * init_state_table_with_size (JNIEnv *, jclass, jint);
-struct state_table * init_state_table (JNIEnv *, jclass);
+struct state_table *init_state_table_with_size (JNIEnv *, jclass, jint);
+struct state_table *init_state_table (JNIEnv *, jclass);
 
 /* lowlevel api */
 void set_state_oid (JNIEnv *, jobject, struct state_table *, jint, void *);
-void * get_state_oid (JNIEnv *, jobject, struct state_table *, jint);
-void * remove_state_oid (JNIEnv *, jobject, struct state_table *, jint);
+void *get_state_oid (JNIEnv *, jobject, struct state_table *, jint);
+void *remove_state_oid (JNIEnv *, jobject, struct state_table *, jint);
 
 /* highlevel api */
 int set_state (JNIEnv *, jobject, struct state_table *, void *);
-void * get_state (JNIEnv *, jobject, struct state_table *);
-void * remove_state_slot (JNIEnv *, jobject, struct state_table *);
+void *get_state (JNIEnv *, jobject, struct state_table *);
+void *remove_state_slot (JNIEnv *, jobject, struct state_table *);
 
 #endif
Index: native/jni/classpath/primlib.c
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/classpath/primlib.c,v
retrieving revision 1.4
diff -I*.class -u -r1.4 primlib.c
--- native/jni/classpath/primlib.c      29 Mar 2004 07:07:26 -0000      1.4
+++ native/jni/classpath/primlib.c      21 Jun 2004 18:58:31 -0000
@@ -39,425 +39,686 @@
 #include <primlib.h>
 #include <jcl.h>
 
-static jclass nativeWrapClass[PRIMLIB_NUMTYPES] = {NULL,NULL,NULL, 
NULL,NULL,NULL,
-                                               NULL,NULL,NULL, NULL,NULL,NULL};
-
-static jclass nativeTypeClass[PRIMLIB_NUMTYPES] = {NULL,NULL,NULL, 
NULL,NULL,NULL,
-                                               NULL,NULL,NULL, NULL,NULL,NULL};
-
-static jmethodID nativeWrapClassConstructor[PRIMLIB_NUMTYPES] = 
{NULL,NULL,NULL, NULL,NULL,NULL,
-                                               NULL,NULL,NULL, NULL,NULL,NULL};
-
-static jmethodID nativeWrapClassAccessor[PRIMLIB_NUMTYPES] = {NULL,NULL,NULL, 
NULL,NULL,NULL,
-                                               NULL,NULL,NULL, NULL,NULL,NULL};
-
-static char * nativeWrapClassName[PRIMLIB_NUMTYPES] = {
-                                                       NULL,
-                                                       NULL,
-                                                       "java/lang/Boolean",
-                                                       "java/lang/Byte",
-                                                       "java/lang/Character",
-                                                       "java/lang/Short",
-                                                       "java/lang/Integer",
-                                                       "java/lang/Long",
-                                                       "java/lang/Float",
-                                                       "java/lang/Double",
-                                                       "java/lang/Void",
-                                                       NULL
-                                                       };
-
-static char * nativeWrapClassConstructorSig[PRIMLIB_NUMTYPES] = {
-                                                       NULL,
-                                                       NULL,
-                                                       "(Z)V",
-                                                       "(B)V",
-                                                       "(C)V",
-                                                       "(S)V",
-                                                       "(I)V",
-                                                       "(J)V",
-                                                       "(F)V",
-                                                       "(D)V",
-                                                       "()V",
-                                                       NULL
-                                                       };
-
-static char * nativeWrapClassAccessorName[PRIMLIB_NUMTYPES] = {
-                                                       NULL,
-                                                       NULL,
-                                                       "booleanValue",
-                                                       "byteValue",
-                                                       "charValue",
-                                                       "shortValue",
-                                                       "intValue",
-                                                       "longValue",
-                                                       "floatValue",
-                                                       "doubleValue",
-                                                       NULL,
-                                                       NULL
+static jclass nativeWrapClass[PRIMLIB_NUMTYPES] =
+  { NULL, NULL, NULL, NULL, NULL, NULL,
+  NULL, NULL, NULL, NULL, NULL, NULL
 };
 
-static char * nativeWrapClassAccessorSig[PRIMLIB_NUMTYPES] = {
-                                                       NULL,
-                                                       NULL,
-                                                       "()Z",
-                                                       "()B",
-                                                       "()C",
-                                                       "()S",
-                                                       "()I",
-                                                       "()J",
-                                                       "()F",
-                                                       "()D",
-                                                       NULL,
-                                                       NULL
+static jclass nativeTypeClass[PRIMLIB_NUMTYPES] =
+  { NULL, NULL, NULL, NULL, NULL, NULL,
+  NULL, NULL, NULL, NULL, NULL, NULL
 };
 
+static jmethodID nativeWrapClassConstructor[PRIMLIB_NUMTYPES] =
+  { NULL, NULL, NULL, NULL, NULL, NULL,
+  NULL, NULL, NULL, NULL, NULL, NULL
+};
 
-JNIEXPORT jclass JNICALL PRIMLIB_GetNativeWrapClass(JNIEnv * env, int 
reflectType) {
-       return 
LINK_LinkClass(env,nativeWrapClass[reflectType],nativeWrapClassName[reflectType]);
-}
-
-static jclass ActuallyGetNativeTypeClass(JNIEnv * env, int reflectType) {
-       jclass wrapClass;
-       jfieldID typeField;
-
-       wrapClass = PRIMLIB_GetNativeWrapClass(env, reflectType);
-       if(wrapClass == NULL)
-               return NULL;
-       typeField = (*env)->GetStaticFieldID(env, wrapClass, "TYPE", 
"Ljava/lang/Class");
-       if(typeField == NULL)
-               return NULL;
-       return (*env)->GetStaticObjectField(env, wrapClass, typeField);
-}
-
-JNIEXPORT jclass JNICALL PRIMLIB_GetNativeTypeClass(JNIEnv * env, int 
reflectType) {
-       return LINK_LinkKnownClass(env, nativeTypeClass[reflectType], 
ActuallyGetNativeTypeClass(env,reflectType));
-}
-
-JNIEXPORT jmethodID JNICALL PRIMLIB_GetNativeWrapClassConstructor(JNIEnv * 
env, int reflectType) {
-       PRIMLIB_GetNativeWrapClass(env,reflectType);
-       return LINK_LinkConstructor(env, 
nativeWrapClassConstructor[reflectType], nativeWrapClass[reflectType], 
nativeWrapClassConstructorSig[reflectType]);
-}
-
-JNIEXPORT jmethodID JNICALL PRIMLIB_GetNativeWrapClassAccessor(JNIEnv * env, 
int reflectType) {
-       PRIMLIB_GetNativeWrapClass(env,reflectType);
-       return LINK_LinkMethod(env, nativeWrapClassAccessor[reflectType], 
nativeWrapClass[reflectType], nativeWrapClassAccessorName[reflectType], 
nativeWrapClassAccessorSig[reflectType]);
-}
-
-
-
-JNIEXPORT jobject JNICALL PRIMLIB_WrapBoolean(JNIEnv * env, jboolean b) {
-       jmethodID construct = PRIMLIB_GetNativeWrapClassConstructor(env, 
PRIMLIB_BOOLEAN);
-       JCL_RETHROW_EXCEPTION(env);
-       return (*env)->NewObject(env, PRIMLIB_GetNativeWrapClass(env, 
PRIMLIB_BOOLEAN), construct, b);
-}
-
-JNIEXPORT jobject JNICALL PRIMLIB_WrapByte   (JNIEnv * env, jbyte b) {
-       jmethodID construct = PRIMLIB_GetNativeWrapClassConstructor(env, 
PRIMLIB_BYTE);
-       JCL_RETHROW_EXCEPTION(env);
-       return (*env)->NewObject(env, PRIMLIB_GetNativeWrapClass(env, 
PRIMLIB_BYTE), construct, b); 
-}
-
-JNIEXPORT jobject JNICALL PRIMLIB_WrapChar   (JNIEnv * env, jchar c) {
-       jmethodID construct = PRIMLIB_GetNativeWrapClassConstructor(env, 
PRIMLIB_CHAR);
-       JCL_RETHROW_EXCEPTION(env);
-       return (*env)->NewObject(env, PRIMLIB_GetNativeWrapClass(env, 
PRIMLIB_CHAR), construct, c);
-}
-
-JNIEXPORT jobject JNICALL PRIMLIB_WrapShort  (JNIEnv * env, jshort s) {
-       jmethodID construct = PRIMLIB_GetNativeWrapClassConstructor(env, 
PRIMLIB_SHORT);
-       JCL_RETHROW_EXCEPTION(env);
-       return (*env)->NewObject(env, PRIMLIB_GetNativeWrapClass(env, 
PRIMLIB_SHORT), construct, s);
-}
-
-JNIEXPORT jobject JNICALL PRIMLIB_WrapInt    (JNIEnv * env, jint i) {
-       jmethodID construct = PRIMLIB_GetNativeWrapClassConstructor(env, 
PRIMLIB_INT);
-       JCL_RETHROW_EXCEPTION(env);
-       return (*env)->NewObject(env, PRIMLIB_GetNativeWrapClass(env, 
PRIMLIB_INT), construct, i);
-}
-
-JNIEXPORT jobject JNICALL PRIMLIB_WrapLong   (JNIEnv * env, jlong l) {
-       jmethodID construct = PRIMLIB_GetNativeWrapClassConstructor(env, 
PRIMLIB_LONG);
-       JCL_RETHROW_EXCEPTION(env);
-       return (*env)->NewObject(env, PRIMLIB_GetNativeWrapClass(env, 
PRIMLIB_LONG), construct, l);
-}
-
-JNIEXPORT jobject JNICALL PRIMLIB_WrapFloat  (JNIEnv * env, jfloat f) {
-       jmethodID construct = PRIMLIB_GetNativeWrapClassConstructor(env, 
PRIMLIB_FLOAT);
-       JCL_RETHROW_EXCEPTION(env);
-       return (*env)->NewObject(env, PRIMLIB_GetNativeWrapClass(env, 
PRIMLIB_FLOAT), construct, f);
-}
-
-JNIEXPORT jobject JNICALL PRIMLIB_WrapDouble (JNIEnv * env, jdouble d) {
-       jmethodID construct = PRIMLIB_GetNativeWrapClassConstructor(env, 
PRIMLIB_DOUBLE);
-       JCL_RETHROW_EXCEPTION(env);
-       return (*env)->NewObject(env, PRIMLIB_GetNativeWrapClass(env, 
PRIMLIB_DOUBLE), construct, d);
-}
-
-
-JNIEXPORT jboolean JNICALL PRIMLIB_UnwrapBoolean(JNIEnv * env, jobject obj) {
-       if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, 
PRIMLIB_BOOLEAN))) {
-               return PRIMLIB_GetBooleanObjectValue(env, obj);
-       } else {
-               JCL_ThrowException(env, "java/lang/IllegalArgumentException", 
"Argument not of correct type.");
-               return JNI_FALSE;
-       }
-}
-
-JNIEXPORT jbyte JNICALL PRIMLIB_UnwrapByte(JNIEnv * env, jobject obj) {
-       if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, 
PRIMLIB_BYTE))) {
-               return PRIMLIB_GetByteObjectValue(env, obj);
-       } else {
-               JCL_ThrowException(env, "java/lang/IllegalArgumentException", 
"Argument not of correct type.");
-               return 0;
-       }
-}
-
-JNIEXPORT jshort JNICALL PRIMLIB_UnwrapShort(JNIEnv * env, jobject obj) {
-       if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, 
PRIMLIB_SHORT))) {
-               return PRIMLIB_GetShortObjectValue(env, obj);
-       } else if((*env)->IsInstanceOf(env, obj, 
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_BYTE))) {
-               return (jshort)PRIMLIB_GetByteObjectValue(env, obj);
-       } else {
-               JCL_ThrowException(env, "java/lang/IllegalArgumentException", 
"Argument not of correct type.");
-               return 0;
-       }
-}
-
-JNIEXPORT jchar JNICALL PRIMLIB_UnwrapChar(JNIEnv * env, jobject obj) {
-       if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, 
PRIMLIB_CHAR))) {
-               return PRIMLIB_GetCharObjectValue(env, obj);
-       } else {
-               JCL_ThrowException(env, "java/lang/IllegalArgumentException", 
"Argument not of correct type.");
-               return 0;
-       }
-}
-
-JNIEXPORT jint JNICALL PRIMLIB_UnwrapInt(JNIEnv * env, jobject obj) {
-       if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, 
PRIMLIB_INT))) {
-               return PRIMLIB_GetIntObjectValue(env, obj);
-       } else if((*env)->IsInstanceOf(env, obj, 
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_SHORT))) {
-               return (jint)PRIMLIB_GetShortObjectValue(env, obj);
-       } else if((*env)->IsInstanceOf(env, obj, 
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_CHAR))) {
-               return (jint)PRIMLIB_GetCharObjectValue(env, obj);
-       } else if((*env)->IsInstanceOf(env, obj, 
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_BYTE))) {
-               return (jint)PRIMLIB_GetByteObjectValue(env, obj);
-       } else {
-               JCL_ThrowException(env, "java/lang/IllegalArgumentException", 
"Argument not of correct type.");
-               return 0;
-       }
-}
-
-JNIEXPORT jlong JNICALL PRIMLIB_UnwrapLong(JNIEnv * env, jobject obj) {
-       if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, 
PRIMLIB_LONG))) {
-               return PRIMLIB_GetLongObjectValue(env, obj);
-       } else if((*env)->IsInstanceOf(env, obj, 
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_INT))) {
-               return (jlong)PRIMLIB_GetIntObjectValue(env, obj);
-       } else if((*env)->IsInstanceOf(env, obj, 
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_SHORT))) {
-               return (jlong)PRIMLIB_GetShortObjectValue(env, obj);
-       } else if((*env)->IsInstanceOf(env, obj, 
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_CHAR))) {
-               return (jlong)PRIMLIB_GetCharObjectValue(env, obj);
-       } else if((*env)->IsInstanceOf(env, obj, 
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_BYTE))) {
-               return (jlong)PRIMLIB_GetByteObjectValue(env, obj);
-       } else {
-               JCL_ThrowException(env, "java/lang/IllegalArgumentException", 
"Argument not of correct type.");
-               return 0;
-       }
-}
-
-JNIEXPORT jfloat JNICALL PRIMLIB_UnwrapFloat(JNIEnv * env, jobject obj) {
-       if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, 
PRIMLIB_FLOAT))) {
-               return PRIMLIB_GetFloatObjectValue(env, obj);
-       } else if((*env)->IsInstanceOf(env, obj, 
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_LONG))) {
-               return (jfloat)PRIMLIB_GetLongObjectValue(env, obj);
-       } else if((*env)->IsInstanceOf(env, obj, 
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_INT))) {
-               return (jfloat)PRIMLIB_GetIntObjectValue(env, obj);
-       } else if((*env)->IsInstanceOf(env, obj, 
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_SHORT))) {
-               return (jfloat)PRIMLIB_GetShortObjectValue(env, obj);
-       } else if((*env)->IsInstanceOf(env, obj, 
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_CHAR))) {
-               return (jfloat)PRIMLIB_GetCharObjectValue(env, obj);
-       } else if((*env)->IsInstanceOf(env, obj, 
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_BYTE))) {
-               return (jfloat)PRIMLIB_GetByteObjectValue(env, obj);
-       } else {
-               JCL_ThrowException(env, "java/lang/IllegalArgumentException", 
"Argument not of correct type.");
-               return 0;
-       }
-}
-
-JNIEXPORT jdouble JNICALL PRIMLIB_UnwrapDouble(JNIEnv * env, jobject obj) {
-       if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env, 
PRIMLIB_DOUBLE))) {
-               return PRIMLIB_GetDoubleObjectValue(env, obj);
-       } else if((*env)->IsInstanceOf(env, obj, 
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_FLOAT))) {
-               return (jdouble)PRIMLIB_GetFloatObjectValue(env, obj);
-       } else if((*env)->IsInstanceOf(env, obj, 
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_LONG))) {
-               return (jdouble)PRIMLIB_GetLongObjectValue(env, obj);
-       } else if((*env)->IsInstanceOf(env, obj, 
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_INT))) {
-               return (jdouble)PRIMLIB_GetIntObjectValue(env, obj);
-       } else if((*env)->IsInstanceOf(env, obj, 
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_SHORT))) {
-               return (jdouble)PRIMLIB_GetShortObjectValue(env, obj);
-       } else if((*env)->IsInstanceOf(env, obj, 
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_CHAR))) {
-               return (jdouble)PRIMLIB_GetCharObjectValue(env, obj);
-       } else if((*env)->IsInstanceOf(env, obj, 
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_BYTE))) {
-               return (jdouble)PRIMLIB_GetByteObjectValue(env, obj);
-       } else {
-               JCL_ThrowException(env, "java/lang/IllegalArgumentException", 
"Argument not of correct type.");
-               return 0;
-       }
-}
-
-JNIEXPORT jint JNICALL PRIMLIB_GetReflectiveWrapperType(JNIEnv * env, jobject 
obj) {
-       jclass typeClass;
-       if(obj == NULL) {
-               return PRIMLIB_NULL;
-       }
-
-       typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_DOUBLE);
-       if((*env)->IsInstanceOf(env, obj, typeClass)) {
-               return PRIMLIB_DOUBLE;
-       }
-       typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_FLOAT);
-       if((*env)->IsInstanceOf(env, obj, typeClass)) {
-               return PRIMLIB_FLOAT;
-       }
-       typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_LONG);
-       if((*env)->IsInstanceOf(env, obj, typeClass)) {
-               return PRIMLIB_LONG;
-       }
-       typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_INT);
-       if((*env)->IsInstanceOf(env, obj, typeClass)) {
-               return PRIMLIB_INT;
-       }
-       typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_CHAR);
-       if((*env)->IsInstanceOf(env, obj, typeClass)) {
-               return PRIMLIB_CHAR;
-       }
-       typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_SHORT);
-       if((*env)->IsInstanceOf(env, obj, typeClass)) {
-               return PRIMLIB_SHORT;
-       }
-       typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_BYTE);
-       if((*env)->IsInstanceOf(env, obj, typeClass)) {
-               return PRIMLIB_BYTE;
-       }
-       typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_BOOLEAN);
-       if((*env)->IsInstanceOf(env, obj, typeClass)) {
-               return PRIMLIB_BOOLEAN;
-       }
-       typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_VOID);
-       if((*env)->IsInstanceOf(env, obj, typeClass)) {
-               return PRIMLIB_VOID;
-       }
-       return PRIMLIB_OBJECT;
-}
-
-JNIEXPORT jint JNICALL PRIMLIB_GetReflectiveType(JNIEnv * env, jclass 
returnType) {
-       jclass typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_DOUBLE);
-       if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
-               return PRIMLIB_DOUBLE;
-       }
-       typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_FLOAT);
-       if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
-               return PRIMLIB_FLOAT;
-       }
-       typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_LONG);
-       if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
-               return PRIMLIB_LONG;
-       }
-       typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_INT);
-       if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
-               return PRIMLIB_INT;
-       }
-       typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_CHAR);
-       if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
-               return PRIMLIB_CHAR;
-       }
-       typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_SHORT);
-       if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
-               return PRIMLIB_SHORT;
-       }
-       typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_BYTE);
-       if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
-               return PRIMLIB_BYTE;
-       }
-       typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_BOOLEAN);
-       if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
-               return PRIMLIB_BOOLEAN;
-       }
-       typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_VOID);
-       if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
-               return PRIMLIB_VOID;
-       }
-       return PRIMLIB_OBJECT;
-}
-
-
-JNIEXPORT jboolean JNICALL PRIMLIB_GetBooleanObjectValue(JNIEnv * env, jobject 
obj) {
-       jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor(env, 
PRIMLIB_BOOLEAN);
-       return (*env)->CallBooleanMethod(env, obj, acc);
-}
-
-JNIEXPORT jbyte JNICALL PRIMLIB_GetByteObjectValue(JNIEnv * env, jobject obj) {
-       jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor(env, PRIMLIB_BYTE);
-       return (*env)->CallByteMethod(env, obj, acc);
-}
-
-JNIEXPORT jshort JNICALL PRIMLIB_GetShortObjectValue(JNIEnv * env, jobject 
obj) {
-       jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor(env, PRIMLIB_SHORT);
-       return (*env)->CallShortMethod(env, obj, acc);
-}
-
-JNIEXPORT jchar JNICALL PRIMLIB_GetCharObjectValue(JNIEnv * env, jobject obj) {
-       jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor(env, PRIMLIB_CHAR);
-       return (*env)->CallCharMethod(env, obj, acc);
-}
-
-JNIEXPORT jint JNICALL PRIMLIB_GetIntObjectValue(JNIEnv * env, jobject obj) {
-       jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor(env, PRIMLIB_INT);
-       return (*env)->CallIntMethod(env, obj, acc);
-}
+static jmethodID nativeWrapClassAccessor[PRIMLIB_NUMTYPES] =
+  { NULL, NULL, NULL, NULL, NULL, NULL,
+  NULL, NULL, NULL, NULL, NULL, NULL
+};
 
-JNIEXPORT jlong JNICALL PRIMLIB_GetLongObjectValue(JNIEnv * env, jobject obj) {
-       jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor(env, PRIMLIB_LONG);
-       return (*env)->CallLongMethod(env, obj, acc);
-}
+static char *nativeWrapClassName[PRIMLIB_NUMTYPES] = {
+  NULL,
+  NULL,
+  "java/lang/Boolean",
+  "java/lang/Byte",
+  "java/lang/Character",
+  "java/lang/Short",
+  "java/lang/Integer",
+  "java/lang/Long",
+  "java/lang/Float",
+  "java/lang/Double",
+  "java/lang/Void",
+  NULL
+};
 
-JNIEXPORT jfloat JNICALL PRIMLIB_GetFloatObjectValue(JNIEnv * env, jobject 
obj) {
-       jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor(env, PRIMLIB_FLOAT);
-       return (*env)->CallFloatMethod(env, obj, acc);
-}
+static char *nativeWrapClassConstructorSig[PRIMLIB_NUMTYPES] = {
+  NULL,
+  NULL,
+  "(Z)V",
+  "(B)V",
+  "(C)V",
+  "(S)V",
+  "(I)V",
+  "(J)V",
+  "(F)V",
+  "(D)V",
+  "()V",
+  NULL
+};
 
-JNIEXPORT jdouble JNICALL PRIMLIB_GetDoubleObjectValue(JNIEnv * env, jobject 
obj) {
-       jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor(env, PRIMLIB_DOUBLE);
-       return (*env)->CallDoubleMethod(env, obj, acc);
-}
+static char *nativeWrapClassAccessorName[PRIMLIB_NUMTYPES] = {
+  NULL,
+  NULL,
+  "booleanValue",
+  "byteValue",
+  "charValue",
+  "shortValue",
+  "intValue",
+  "longValue",
+  "floatValue",
+  "doubleValue",
+  NULL,
+  NULL
+};
 
+static char *nativeWrapClassAccessorSig[PRIMLIB_NUMTYPES] = {
+  NULL,
+  NULL,
+  "()Z",
+  "()B",
+  "()C",
+  "()S",
+  "()I",
+  "()J",
+  "()F",
+  "()D",
+  NULL,
+  NULL
+};
 
 
-JNIEXPORT jvalue JNICALL PRIMLIB_UnwrapJValue(JNIEnv* env, jobject obj, jclass 
classType) {
-       jvalue retval;
-       jint objType = PRIMLIB_GetReflectiveType(env, classType);
-       if(objType == PRIMLIB_BOOLEAN) {
-               retval.z = PRIMLIB_UnwrapBoolean(env,obj);
-       } else if(objType == PRIMLIB_BYTE) {
-               retval.b = PRIMLIB_UnwrapByte(env,obj);
-       } else if(objType == PRIMLIB_CHAR) {
-               retval.c = PRIMLIB_UnwrapChar(env,obj);
-       } else if(objType == PRIMLIB_SHORT) {
-               retval.s = PRIMLIB_UnwrapShort(env,obj);
-       } else if(objType == PRIMLIB_INT) {
-               retval.i = PRIMLIB_UnwrapInt(env,obj);
-       } else if(objType == PRIMLIB_LONG) {
-               retval.j = PRIMLIB_UnwrapLong(env,obj);
-       } else if(objType == PRIMLIB_FLOAT) {
-               retval.f = PRIMLIB_UnwrapFloat(env,obj);
-       } else if(objType == PRIMLIB_DOUBLE) {
-               retval.d = PRIMLIB_UnwrapDouble(env,obj);
-       } else {
-               if(obj != NULL && !(*env)->IsInstanceOf(env, obj, classType)) {
-                       JCL_ThrowException(env, 
"java/lang/IllegalArgumentException", "Argument not of correct object type.");
-                       return retval;
-               }
-               retval.l = obj;
-       }
-       return retval;
+JNIEXPORT jclass JNICALL
+PRIMLIB_GetNativeWrapClass (JNIEnv * env, int reflectType)
+{
+  return LINK_LinkClass (env, nativeWrapClass[reflectType],
+                        nativeWrapClassName[reflectType]);
+}
+
+static jclass
+ActuallyGetNativeTypeClass (JNIEnv * env, int reflectType)
+{
+  jclass wrapClass;
+  jfieldID typeField;
+
+  wrapClass = PRIMLIB_GetNativeWrapClass (env, reflectType);
+  if (wrapClass == NULL)
+    return NULL;
+  typeField =
+    (*env)->GetStaticFieldID (env, wrapClass, "TYPE", "Ljava/lang/Class");
+  if (typeField == NULL)
+    return NULL;
+  return (*env)->GetStaticObjectField (env, wrapClass, typeField);
+}
+
+JNIEXPORT jclass JNICALL
+PRIMLIB_GetNativeTypeClass (JNIEnv * env, int reflectType)
+{
+  return LINK_LinkKnownClass (env, nativeTypeClass[reflectType],
+                             ActuallyGetNativeTypeClass (env, reflectType));
+}
+
+JNIEXPORT jmethodID JNICALL
+PRIMLIB_GetNativeWrapClassConstructor (JNIEnv * env, int reflectType)
+{
+  PRIMLIB_GetNativeWrapClass (env, reflectType);
+  return LINK_LinkConstructor (env, nativeWrapClassConstructor[reflectType],
+                              nativeWrapClass[reflectType],
+                              nativeWrapClassConstructorSig[reflectType]);
+}
+
+JNIEXPORT jmethodID JNICALL
+PRIMLIB_GetNativeWrapClassAccessor (JNIEnv * env, int reflectType)
+{
+  PRIMLIB_GetNativeWrapClass (env, reflectType);
+  return LINK_LinkMethod (env, nativeWrapClassAccessor[reflectType],
+                         nativeWrapClass[reflectType],
+                         nativeWrapClassAccessorName[reflectType],
+                         nativeWrapClassAccessorSig[reflectType]);
+}
+
+
+
+JNIEXPORT jobject JNICALL
+PRIMLIB_WrapBoolean (JNIEnv * env, jboolean b)
+{
+  jmethodID construct =
+    PRIMLIB_GetNativeWrapClassConstructor (env, PRIMLIB_BOOLEAN);
+  JCL_RETHROW_EXCEPTION (env);
+  return (*env)->NewObject (env,
+                           PRIMLIB_GetNativeWrapClass (env, PRIMLIB_BOOLEAN),
+                           construct, b);
+}
+
+JNIEXPORT jobject JNICALL
+PRIMLIB_WrapByte (JNIEnv * env, jbyte b)
+{
+  jmethodID construct =
+    PRIMLIB_GetNativeWrapClassConstructor (env, PRIMLIB_BYTE);
+  JCL_RETHROW_EXCEPTION (env);
+  return (*env)->NewObject (env,
+                           PRIMLIB_GetNativeWrapClass (env, PRIMLIB_BYTE),
+                           construct, b);
+}
+
+JNIEXPORT jobject JNICALL
+PRIMLIB_WrapChar (JNIEnv * env, jchar c)
+{
+  jmethodID construct =
+    PRIMLIB_GetNativeWrapClassConstructor (env, PRIMLIB_CHAR);
+  JCL_RETHROW_EXCEPTION (env);
+  return (*env)->NewObject (env,
+                           PRIMLIB_GetNativeWrapClass (env, PRIMLIB_CHAR),
+                           construct, c);
+}
+
+JNIEXPORT jobject JNICALL
+PRIMLIB_WrapShort (JNIEnv * env, jshort s)
+{
+  jmethodID construct =
+    PRIMLIB_GetNativeWrapClassConstructor (env, PRIMLIB_SHORT);
+  JCL_RETHROW_EXCEPTION (env);
+  return (*env)->NewObject (env,
+                           PRIMLIB_GetNativeWrapClass (env, PRIMLIB_SHORT),
+                           construct, s);
+}
+
+JNIEXPORT jobject JNICALL
+PRIMLIB_WrapInt (JNIEnv * env, jint i)
+{
+  jmethodID construct =
+    PRIMLIB_GetNativeWrapClassConstructor (env, PRIMLIB_INT);
+  JCL_RETHROW_EXCEPTION (env);
+  return (*env)->NewObject (env,
+                           PRIMLIB_GetNativeWrapClass (env, PRIMLIB_INT),
+                           construct, i);
+}
+
+JNIEXPORT jobject JNICALL
+PRIMLIB_WrapLong (JNIEnv * env, jlong l)
+{
+  jmethodID construct =
+    PRIMLIB_GetNativeWrapClassConstructor (env, PRIMLIB_LONG);
+  JCL_RETHROW_EXCEPTION (env);
+  return (*env)->NewObject (env,
+                           PRIMLIB_GetNativeWrapClass (env, PRIMLIB_LONG),
+                           construct, l);
+}
+
+JNIEXPORT jobject JNICALL
+PRIMLIB_WrapFloat (JNIEnv * env, jfloat f)
+{
+  jmethodID construct =
+    PRIMLIB_GetNativeWrapClassConstructor (env, PRIMLIB_FLOAT);
+  JCL_RETHROW_EXCEPTION (env);
+  return (*env)->NewObject (env,
+                           PRIMLIB_GetNativeWrapClass (env, PRIMLIB_FLOAT),
+                           construct, f);
+}
+
+JNIEXPORT jobject JNICALL
+PRIMLIB_WrapDouble (JNIEnv * env, jdouble d)
+{
+  jmethodID construct =
+    PRIMLIB_GetNativeWrapClassConstructor (env, PRIMLIB_DOUBLE);
+  JCL_RETHROW_EXCEPTION (env);
+  return (*env)->NewObject (env,
+                           PRIMLIB_GetNativeWrapClass (env, PRIMLIB_DOUBLE),
+                           construct, d);
+}
+
+
+JNIEXPORT jboolean JNICALL
+PRIMLIB_UnwrapBoolean (JNIEnv * env, jobject obj)
+{
+  if ((*env)->
+      IsInstanceOf (env, obj,
+                   PRIMLIB_GetNativeWrapClass (env, PRIMLIB_BOOLEAN)))
+    {
+      return PRIMLIB_GetBooleanObjectValue (env, obj);
+    }
+  else
+    {
+      JCL_ThrowException (env, "java/lang/IllegalArgumentException",
+                         "Argument not of correct type.");
+      return JNI_FALSE;
+    }
+}
+
+JNIEXPORT jbyte JNICALL
+PRIMLIB_UnwrapByte (JNIEnv * env, jobject obj)
+{
+  if ((*env)->
+      IsInstanceOf (env, obj, PRIMLIB_GetNativeWrapClass (env, PRIMLIB_BYTE)))
+    {
+      return PRIMLIB_GetByteObjectValue (env, obj);
+    }
+  else
+    {
+      JCL_ThrowException (env, "java/lang/IllegalArgumentException",
+                         "Argument not of correct type.");
+      return 0;
+    }
+}
+
+JNIEXPORT jshort JNICALL
+PRIMLIB_UnwrapShort (JNIEnv * env, jobject obj)
+{
+  if ((*env)->
+      IsInstanceOf (env, obj,
+                   PRIMLIB_GetNativeWrapClass (env, PRIMLIB_SHORT)))
+    {
+      return PRIMLIB_GetShortObjectValue (env, obj);
+    }
+  else if ((*env)->
+          IsInstanceOf (env, obj,
+                        PRIMLIB_GetNativeWrapClass (env, PRIMLIB_BYTE)))
+    {
+      return (jshort) PRIMLIB_GetByteObjectValue (env, obj);
+    }
+  else
+    {
+      JCL_ThrowException (env, "java/lang/IllegalArgumentException",
+                         "Argument not of correct type.");
+      return 0;
+    }
+}
+
+JNIEXPORT jchar JNICALL
+PRIMLIB_UnwrapChar (JNIEnv * env, jobject obj)
+{
+  if ((*env)->
+      IsInstanceOf (env, obj, PRIMLIB_GetNativeWrapClass (env, PRIMLIB_CHAR)))
+    {
+      return PRIMLIB_GetCharObjectValue (env, obj);
+    }
+  else
+    {
+      JCL_ThrowException (env, "java/lang/IllegalArgumentException",
+                         "Argument not of correct type.");
+      return 0;
+    }
+}
+
+JNIEXPORT jint JNICALL
+PRIMLIB_UnwrapInt (JNIEnv * env, jobject obj)
+{
+  if ((*env)->
+      IsInstanceOf (env, obj, PRIMLIB_GetNativeWrapClass (env, PRIMLIB_INT)))
+    {
+      return PRIMLIB_GetIntObjectValue (env, obj);
+    }
+  else if ((*env)->
+          IsInstanceOf (env, obj,
+                        PRIMLIB_GetNativeWrapClass (env, PRIMLIB_SHORT)))
+    {
+      return (jint) PRIMLIB_GetShortObjectValue (env, obj);
+    }
+  else if ((*env)->
+          IsInstanceOf (env, obj,
+                        PRIMLIB_GetNativeWrapClass (env, PRIMLIB_CHAR)))
+    {
+      return (jint) PRIMLIB_GetCharObjectValue (env, obj);
+    }
+  else if ((*env)->
+          IsInstanceOf (env, obj,
+                        PRIMLIB_GetNativeWrapClass (env, PRIMLIB_BYTE)))
+    {
+      return (jint) PRIMLIB_GetByteObjectValue (env, obj);
+    }
+  else
+    {
+      JCL_ThrowException (env, "java/lang/IllegalArgumentException",
+                         "Argument not of correct type.");
+      return 0;
+    }
+}
+
+JNIEXPORT jlong JNICALL
+PRIMLIB_UnwrapLong (JNIEnv * env, jobject obj)
+{
+  if ((*env)->
+      IsInstanceOf (env, obj, PRIMLIB_GetNativeWrapClass (env, PRIMLIB_LONG)))
+    {
+      return PRIMLIB_GetLongObjectValue (env, obj);
+    }
+  else if ((*env)->
+          IsInstanceOf (env, obj,
+                        PRIMLIB_GetNativeWrapClass (env, PRIMLIB_INT)))
+    {
+      return (jlong) PRIMLIB_GetIntObjectValue (env, obj);
+    }
+  else if ((*env)->
+          IsInstanceOf (env, obj,
+                        PRIMLIB_GetNativeWrapClass (env, PRIMLIB_SHORT)))
+    {
+      return (jlong) PRIMLIB_GetShortObjectValue (env, obj);
+    }
+  else if ((*env)->
+          IsInstanceOf (env, obj,
+                        PRIMLIB_GetNativeWrapClass (env, PRIMLIB_CHAR)))
+    {
+      return (jlong) PRIMLIB_GetCharObjectValue (env, obj);
+    }
+  else if ((*env)->
+          IsInstanceOf (env, obj,
+                        PRIMLIB_GetNativeWrapClass (env, PRIMLIB_BYTE)))
+    {
+      return (jlong) PRIMLIB_GetByteObjectValue (env, obj);
+    }
+  else
+    {
+      JCL_ThrowException (env, "java/lang/IllegalArgumentException",
+                         "Argument not of correct type.");
+      return 0;
+    }
+}
+
+JNIEXPORT jfloat JNICALL
+PRIMLIB_UnwrapFloat (JNIEnv * env, jobject obj)
+{
+  if ((*env)->
+      IsInstanceOf (env, obj,
+                   PRIMLIB_GetNativeWrapClass (env, PRIMLIB_FLOAT)))
+    {
+      return PRIMLIB_GetFloatObjectValue (env, obj);
+    }
+  else if ((*env)->
+          IsInstanceOf (env, obj,
+                        PRIMLIB_GetNativeWrapClass (env, PRIMLIB_LONG)))
+    {
+      return (jfloat) PRIMLIB_GetLongObjectValue (env, obj);
+    }
+  else if ((*env)->
+          IsInstanceOf (env, obj,
+                        PRIMLIB_GetNativeWrapClass (env, PRIMLIB_INT)))
+    {
+      return (jfloat) PRIMLIB_GetIntObjectValue (env, obj);
+    }
+  else if ((*env)->
+          IsInstanceOf (env, obj,
+                        PRIMLIB_GetNativeWrapClass (env, PRIMLIB_SHORT)))
+    {
+      return (jfloat) PRIMLIB_GetShortObjectValue (env, obj);
+    }
+  else if ((*env)->
+          IsInstanceOf (env, obj,
+                        PRIMLIB_GetNativeWrapClass (env, PRIMLIB_CHAR)))
+    {
+      return (jfloat) PRIMLIB_GetCharObjectValue (env, obj);
+    }
+  else if ((*env)->
+          IsInstanceOf (env, obj,
+                        PRIMLIB_GetNativeWrapClass (env, PRIMLIB_BYTE)))
+    {
+      return (jfloat) PRIMLIB_GetByteObjectValue (env, obj);
+    }
+  else
+    {
+      JCL_ThrowException (env, "java/lang/IllegalArgumentException",
+                         "Argument not of correct type.");
+      return 0;
+    }
+}
+
+JNIEXPORT jdouble JNICALL
+PRIMLIB_UnwrapDouble (JNIEnv * env, jobject obj)
+{
+  if ((*env)->
+      IsInstanceOf (env, obj,
+                   PRIMLIB_GetNativeWrapClass (env, PRIMLIB_DOUBLE)))
+    {
+      return PRIMLIB_GetDoubleObjectValue (env, obj);
+    }
+  else if ((*env)->
+          IsInstanceOf (env, obj,
+                        PRIMLIB_GetNativeWrapClass (env, PRIMLIB_FLOAT)))
+    {
+      return (jdouble) PRIMLIB_GetFloatObjectValue (env, obj);
+    }
+  else if ((*env)->
+          IsInstanceOf (env, obj,
+                        PRIMLIB_GetNativeWrapClass (env, PRIMLIB_LONG)))
+    {
+      return (jdouble) PRIMLIB_GetLongObjectValue (env, obj);
+    }
+  else if ((*env)->
+          IsInstanceOf (env, obj,
+                        PRIMLIB_GetNativeWrapClass (env, PRIMLIB_INT)))
+    {
+      return (jdouble) PRIMLIB_GetIntObjectValue (env, obj);
+    }
+  else if ((*env)->
+          IsInstanceOf (env, obj,
+                        PRIMLIB_GetNativeWrapClass (env, PRIMLIB_SHORT)))
+    {
+      return (jdouble) PRIMLIB_GetShortObjectValue (env, obj);
+    }
+  else if ((*env)->
+          IsInstanceOf (env, obj,
+                        PRIMLIB_GetNativeWrapClass (env, PRIMLIB_CHAR)))
+    {
+      return (jdouble) PRIMLIB_GetCharObjectValue (env, obj);
+    }
+  else if ((*env)->
+          IsInstanceOf (env, obj,
+                        PRIMLIB_GetNativeWrapClass (env, PRIMLIB_BYTE)))
+    {
+      return (jdouble) PRIMLIB_GetByteObjectValue (env, obj);
+    }
+  else
+    {
+      JCL_ThrowException (env, "java/lang/IllegalArgumentException",
+                         "Argument not of correct type.");
+      return 0;
+    }
+}
+
+JNIEXPORT jint JNICALL
+PRIMLIB_GetReflectiveWrapperType (JNIEnv * env, jobject obj)
+{
+  jclass typeClass;
+  if (obj == NULL)
+    {
+      return PRIMLIB_NULL;
+    }
+
+  typeClass = PRIMLIB_GetNativeWrapClass (env, PRIMLIB_DOUBLE);
+  if ((*env)->IsInstanceOf (env, obj, typeClass))
+    {
+      return PRIMLIB_DOUBLE;
+    }
+  typeClass = PRIMLIB_GetNativeWrapClass (env, PRIMLIB_FLOAT);
+  if ((*env)->IsInstanceOf (env, obj, typeClass))
+    {
+      return PRIMLIB_FLOAT;
+    }
+  typeClass = PRIMLIB_GetNativeWrapClass (env, PRIMLIB_LONG);
+  if ((*env)->IsInstanceOf (env, obj, typeClass))
+    {
+      return PRIMLIB_LONG;
+    }
+  typeClass = PRIMLIB_GetNativeWrapClass (env, PRIMLIB_INT);
+  if ((*env)->IsInstanceOf (env, obj, typeClass))
+    {
+      return PRIMLIB_INT;
+    }
+  typeClass = PRIMLIB_GetNativeWrapClass (env, PRIMLIB_CHAR);
+  if ((*env)->IsInstanceOf (env, obj, typeClass))
+    {
+      return PRIMLIB_CHAR;
+    }
+  typeClass = PRIMLIB_GetNativeWrapClass (env, PRIMLIB_SHORT);
+  if ((*env)->IsInstanceOf (env, obj, typeClass))
+    {
+      return PRIMLIB_SHORT;
+    }
+  typeClass = PRIMLIB_GetNativeWrapClass (env, PRIMLIB_BYTE);
+  if ((*env)->IsInstanceOf (env, obj, typeClass))
+    {
+      return PRIMLIB_BYTE;
+    }
+  typeClass = PRIMLIB_GetNativeWrapClass (env, PRIMLIB_BOOLEAN);
+  if ((*env)->IsInstanceOf (env, obj, typeClass))
+    {
+      return PRIMLIB_BOOLEAN;
+    }
+  typeClass = PRIMLIB_GetNativeWrapClass (env, PRIMLIB_VOID);
+  if ((*env)->IsInstanceOf (env, obj, typeClass))
+    {
+      return PRIMLIB_VOID;
+    }
+  return PRIMLIB_OBJECT;
+}
+
+JNIEXPORT jint JNICALL
+PRIMLIB_GetReflectiveType (JNIEnv * env, jclass returnType)
+{
+  jclass typeClass = PRIMLIB_GetNativeTypeClass (env, PRIMLIB_DOUBLE);
+  if ((*env)->IsAssignableFrom (env, returnType, typeClass))
+    {
+      return PRIMLIB_DOUBLE;
+    }
+  typeClass = PRIMLIB_GetNativeTypeClass (env, PRIMLIB_FLOAT);
+  if ((*env)->IsAssignableFrom (env, returnType, typeClass))
+    {
+      return PRIMLIB_FLOAT;
+    }
+  typeClass = PRIMLIB_GetNativeTypeClass (env, PRIMLIB_LONG);
+  if ((*env)->IsAssignableFrom (env, returnType, typeClass))
+    {
+      return PRIMLIB_LONG;
+    }
+  typeClass = PRIMLIB_GetNativeTypeClass (env, PRIMLIB_INT);
+  if ((*env)->IsAssignableFrom (env, returnType, typeClass))
+    {
+      return PRIMLIB_INT;
+    }
+  typeClass = PRIMLIB_GetNativeTypeClass (env, PRIMLIB_CHAR);
+  if ((*env)->IsAssignableFrom (env, returnType, typeClass))
+    {
+      return PRIMLIB_CHAR;
+    }
+  typeClass = PRIMLIB_GetNativeTypeClass (env, PRIMLIB_SHORT);
+  if ((*env)->IsAssignableFrom (env, returnType, typeClass))
+    {
+      return PRIMLIB_SHORT;
+    }
+  typeClass = PRIMLIB_GetNativeTypeClass (env, PRIMLIB_BYTE);
+  if ((*env)->IsAssignableFrom (env, returnType, typeClass))
+    {
+      return PRIMLIB_BYTE;
+    }
+  typeClass = PRIMLIB_GetNativeTypeClass (env, PRIMLIB_BOOLEAN);
+  if ((*env)->IsAssignableFrom (env, returnType, typeClass))
+    {
+      return PRIMLIB_BOOLEAN;
+    }
+  typeClass = PRIMLIB_GetNativeTypeClass (env, PRIMLIB_VOID);
+  if ((*env)->IsAssignableFrom (env, returnType, typeClass))
+    {
+      return PRIMLIB_VOID;
+    }
+  return PRIMLIB_OBJECT;
+}
+
+
+JNIEXPORT jboolean JNICALL
+PRIMLIB_GetBooleanObjectValue (JNIEnv * env, jobject obj)
+{
+  jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor (env, PRIMLIB_BOOLEAN);
+  return (*env)->CallBooleanMethod (env, obj, acc);
+}
+
+JNIEXPORT jbyte JNICALL
+PRIMLIB_GetByteObjectValue (JNIEnv * env, jobject obj)
+{
+  jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor (env, PRIMLIB_BYTE);
+  return (*env)->CallByteMethod (env, obj, acc);
+}
+
+JNIEXPORT jshort JNICALL
+PRIMLIB_GetShortObjectValue (JNIEnv * env, jobject obj)
+{
+  jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor (env, PRIMLIB_SHORT);
+  return (*env)->CallShortMethod (env, obj, acc);
+}
+
+JNIEXPORT jchar JNICALL
+PRIMLIB_GetCharObjectValue (JNIEnv * env, jobject obj)
+{
+  jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor (env, PRIMLIB_CHAR);
+  return (*env)->CallCharMethod (env, obj, acc);
+}
+
+JNIEXPORT jint JNICALL
+PRIMLIB_GetIntObjectValue (JNIEnv * env, jobject obj)
+{
+  jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor (env, PRIMLIB_INT);
+  return (*env)->CallIntMethod (env, obj, acc);
+}
+
+JNIEXPORT jlong JNICALL
+PRIMLIB_GetLongObjectValue (JNIEnv * env, jobject obj)
+{
+  jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor (env, PRIMLIB_LONG);
+  return (*env)->CallLongMethod (env, obj, acc);
+}
+
+JNIEXPORT jfloat JNICALL
+PRIMLIB_GetFloatObjectValue (JNIEnv * env, jobject obj)
+{
+  jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor (env, PRIMLIB_FLOAT);
+  return (*env)->CallFloatMethod (env, obj, acc);
+}
+
+JNIEXPORT jdouble JNICALL
+PRIMLIB_GetDoubleObjectValue (JNIEnv * env, jobject obj)
+{
+  jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor (env, PRIMLIB_DOUBLE);
+  return (*env)->CallDoubleMethod (env, obj, acc);
+}
+
+
+
+JNIEXPORT jvalue JNICALL
+PRIMLIB_UnwrapJValue (JNIEnv * env, jobject obj, jclass classType)
+{
+  jvalue retval;
+  jint objType = PRIMLIB_GetReflectiveType (env, classType);
+  if (objType == PRIMLIB_BOOLEAN)
+    {
+      retval.z = PRIMLIB_UnwrapBoolean (env, obj);
+    }
+  else if (objType == PRIMLIB_BYTE)
+    {
+      retval.b = PRIMLIB_UnwrapByte (env, obj);
+    }
+  else if (objType == PRIMLIB_CHAR)
+    {
+      retval.c = PRIMLIB_UnwrapChar (env, obj);
+    }
+  else if (objType == PRIMLIB_SHORT)
+    {
+      retval.s = PRIMLIB_UnwrapShort (env, obj);
+    }
+  else if (objType == PRIMLIB_INT)
+    {
+      retval.i = PRIMLIB_UnwrapInt (env, obj);
+    }
+  else if (objType == PRIMLIB_LONG)
+    {
+      retval.j = PRIMLIB_UnwrapLong (env, obj);
+    }
+  else if (objType == PRIMLIB_FLOAT)
+    {
+      retval.f = PRIMLIB_UnwrapFloat (env, obj);
+    }
+  else if (objType == PRIMLIB_DOUBLE)
+    {
+      retval.d = PRIMLIB_UnwrapDouble (env, obj);
+    }
+  else
+    {
+      if (obj != NULL && !(*env)->IsInstanceOf (env, obj, classType))
+       {
+         JCL_ThrowException (env, "java/lang/IllegalArgumentException",
+                             "Argument not of correct object type.");
+         return retval;
+       }
+      retval.l = obj;
+    }
+  return retval;
 }
-
Index: native/jni/classpath/primlib.h
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/classpath/primlib.h,v
retrieving revision 1.4
diff -I*.class -u -r1.4 primlib.h
--- native/jni/classpath/primlib.h      29 Mar 2004 07:07:26 -0000      1.4
+++ native/jni/classpath/primlib.h      21 Jun 2004 18:58:31 -0000
@@ -55,48 +55,65 @@
 #define PRIMLIB_NUMTYPES 12
 
 /* Low-level primitive class accessor functions. */
-JNIEXPORT jclass JNICALL PRIMLIB_GetNativeWrapClass(JNIEnv * env, int 
reflectType);
-JNIEXPORT jclass JNICALL PRIMLIB_GetNativeTypeClass(JNIEnv * env, int 
reflectType);
-JNIEXPORT jmethodID JNICALL PRIMLIB_GetNativeWrapClassConstructor(JNIEnv * 
env, int reflectType);
-JNIEXPORT jmethodID JNICALL PRIMLIB_GetNativeWrapClassAccessor(JNIEnv * env, 
int reflectType);
+JNIEXPORT jclass JNICALL PRIMLIB_GetNativeWrapClass (JNIEnv * env,
+                                                    int reflectType);
+JNIEXPORT jclass JNICALL PRIMLIB_GetNativeTypeClass (JNIEnv * env,
+                                                    int reflectType);
+JNIEXPORT jmethodID JNICALL PRIMLIB_GetNativeWrapClassConstructor (JNIEnv *
+                                                                  env,
+                                                                  int
+                                                                  reflectType);
+JNIEXPORT jmethodID JNICALL PRIMLIB_GetNativeWrapClassAccessor (JNIEnv * env,
+                                                               int
+                                                               reflectType);
 
 /* Type discovery functions: WrapperType finds out j.l.Boolean/Byte/etc., and
    Type finds out j.l.Boolean.TYPE, etc.
 */
-JNIEXPORT jint JNICALL PRIMLIB_GetReflectiveWrapperType(JNIEnv * env, jobject 
obj);
-JNIEXPORT jint JNICALL PRIMLIB_GetReflectiveType(JNIEnv * env, jclass 
returnType);
+JNIEXPORT jint JNICALL PRIMLIB_GetReflectiveWrapperType (JNIEnv * env,
+                                                        jobject obj);
+JNIEXPORT jint JNICALL PRIMLIB_GetReflectiveType (JNIEnv * env,
+                                                 jclass returnType);
 
 /* Constructor functions. */
-JNIEXPORT jobject JNICALL PRIMLIB_WrapBoolean(JNIEnv * env, jboolean b);
-JNIEXPORT jobject JNICALL PRIMLIB_WrapByte   (JNIEnv * env, jbyte b);
-JNIEXPORT jobject JNICALL PRIMLIB_WrapChar   (JNIEnv * env, jchar c);
-JNIEXPORT jobject JNICALL PRIMLIB_WrapShort  (JNIEnv * env, jshort s);
-JNIEXPORT jobject JNICALL PRIMLIB_WrapInt    (JNIEnv * env, jint i);
-JNIEXPORT jobject JNICALL PRIMLIB_WrapLong   (JNIEnv * env, jlong l);
-JNIEXPORT jobject JNICALL PRIMLIB_WrapFloat  (JNIEnv * env, jfloat f);
+JNIEXPORT jobject JNICALL PRIMLIB_WrapBoolean (JNIEnv * env, jboolean b);
+JNIEXPORT jobject JNICALL PRIMLIB_WrapByte (JNIEnv * env, jbyte b);
+JNIEXPORT jobject JNICALL PRIMLIB_WrapChar (JNIEnv * env, jchar c);
+JNIEXPORT jobject JNICALL PRIMLIB_WrapShort (JNIEnv * env, jshort s);
+JNIEXPORT jobject JNICALL PRIMLIB_WrapInt (JNIEnv * env, jint i);
+JNIEXPORT jobject JNICALL PRIMLIB_WrapLong (JNIEnv * env, jlong l);
+JNIEXPORT jobject JNICALL PRIMLIB_WrapFloat (JNIEnv * env, jfloat f);
 JNIEXPORT jobject JNICALL PRIMLIB_WrapDouble (JNIEnv * env, jdouble d);
 
 /* Widening conversion unwrapping functions. */
-JNIEXPORT jboolean JNICALL PRIMLIB_UnwrapBoolean(JNIEnv * env, jobject obj);
-JNIEXPORT jbyte    JNICALL PRIMLIB_UnwrapByte   (JNIEnv * env, jobject obj);
-JNIEXPORT jshort   JNICALL PRIMLIB_UnwrapShort  (JNIEnv * env, jobject obj);
-JNIEXPORT jchar    JNICALL PRIMLIB_UnwrapChar   (JNIEnv * env, jobject obj);
-JNIEXPORT jint     JNICALL PRIMLIB_UnwrapInt    (JNIEnv * env, jobject obj);
-JNIEXPORT jlong    JNICALL PRIMLIB_UnwrapLong   (JNIEnv * env, jobject obj);
-JNIEXPORT jfloat   JNICALL PRIMLIB_UnwrapFloat  (JNIEnv * env, jobject obj);
-JNIEXPORT jdouble  JNICALL PRIMLIB_UnwrapDouble (JNIEnv * env, jobject obj);
+JNIEXPORT jboolean JNICALL PRIMLIB_UnwrapBoolean (JNIEnv * env, jobject obj);
+JNIEXPORT jbyte JNICALL PRIMLIB_UnwrapByte (JNIEnv * env, jobject obj);
+JNIEXPORT jshort JNICALL PRIMLIB_UnwrapShort (JNIEnv * env, jobject obj);
+JNIEXPORT jchar JNICALL PRIMLIB_UnwrapChar (JNIEnv * env, jobject obj);
+JNIEXPORT jint JNICALL PRIMLIB_UnwrapInt (JNIEnv * env, jobject obj);
+JNIEXPORT jlong JNICALL PRIMLIB_UnwrapLong (JNIEnv * env, jobject obj);
+JNIEXPORT jfloat JNICALL PRIMLIB_UnwrapFloat (JNIEnv * env, jobject obj);
+JNIEXPORT jdouble JNICALL PRIMLIB_UnwrapDouble (JNIEnv * env, jobject obj);
 
 /* Simple unwrapping functions. Objects *must* be of correct type. */
-JNIEXPORT jboolean JNICALL PRIMLIB_GetBooleanObjectValue(JNIEnv * env, jobject 
obj);
-JNIEXPORT jbyte    JNICALL PRIMLIB_GetByteObjectValue   (JNIEnv * env, jobject 
obj);
-JNIEXPORT jshort   JNICALL PRIMLIB_GetShortObjectValue  (JNIEnv * env, jobject 
obj);
-JNIEXPORT jchar    JNICALL PRIMLIB_GetCharObjectValue   (JNIEnv * env, jobject 
obj);
-JNIEXPORT jint     JNICALL PRIMLIB_GetIntObjectValue    (JNIEnv * env, jobject 
obj);
-JNIEXPORT jlong    JNICALL PRIMLIB_GetLongObjectValue   (JNIEnv * env, jobject 
obj);
-JNIEXPORT jfloat   JNICALL PRIMLIB_GetFloatObjectValue  (JNIEnv * env, jobject 
obj);
-JNIEXPORT jdouble  JNICALL PRIMLIB_GetDoubleObjectValue (JNIEnv * env, jobject 
obj);
+JNIEXPORT jboolean JNICALL PRIMLIB_GetBooleanObjectValue (JNIEnv * env,
+                                                         jobject obj);
+JNIEXPORT jbyte JNICALL PRIMLIB_GetByteObjectValue (JNIEnv * env,
+                                                   jobject obj);
+JNIEXPORT jshort JNICALL PRIMLIB_GetShortObjectValue (JNIEnv * env,
+                                                     jobject obj);
+JNIEXPORT jchar JNICALL PRIMLIB_GetCharObjectValue (JNIEnv * env,
+                                                   jobject obj);
+JNIEXPORT jint JNICALL PRIMLIB_GetIntObjectValue (JNIEnv * env, jobject obj);
+JNIEXPORT jlong JNICALL PRIMLIB_GetLongObjectValue (JNIEnv * env,
+                                                   jobject obj);
+JNIEXPORT jfloat JNICALL PRIMLIB_GetFloatObjectValue (JNIEnv * env,
+                                                     jobject obj);
+JNIEXPORT jdouble JNICALL PRIMLIB_GetDoubleObjectValue (JNIEnv * env,
+                                                       jobject obj);
 
 /* jvalue conversion: Unwrap obj to the type of classType, with widening 
conversion. */
-JNIEXPORT jvalue JNICALL PRIMLIB_UnwrapJValue(JNIEnv* env, jobject obj, jclass 
classType);
+JNIEXPORT jvalue JNICALL PRIMLIB_UnwrapJValue (JNIEnv * env, jobject obj,
+                                              jclass classType);
 
 #endif

reply via email to

[Prev in Thread] Current Thread [Next in Thread]