PatchSet 6698 
Date: 2005/07/05 17:20:35
Author: guilhem
Branch: HEAD
Tag: (none) 
Log:
Added support for JNI call NewWeakRef/DeleteWeakRef.

        * WHATSNEW: Added changes to JNI interface.

        * kaffe/kaffevm/gc.h,
        kaffe/kaffevm/gcFuncs.c: Added new type KGC_ALLOC_VMWEAKREF.

        * kaffe/kaffevm/javacall.c
        (KaffeVM_classMethodA, KaffeVM_callMethodV):
        Unveil an object reference passed into
        arguments if needed.

        * kaffe/kaffevm/intrp/methodcalls.c
        (engine_callMethod): Unveil the return value if it is an object
        reference.

        * kaffe/kaffevm/jit/native-wrapper.c
        (Kaffe_wrapper): Added some JIT pseudo-code to unveil object
        stored into weak references.

        * kaffe/kaffevm/jni/Makefile.am: Added jni-refs.c

        * kaffe/kaffevm/jni/Makefile.in: Regenerated.

        * kaffe/kaffevm/jni/jni-arrays.c,
        kaffe/kaffevm/jni/jni-callmethod.c,
        kaffe/kaffevm/jni/jni-fields.c,
        kaffe/kaffevm/jni/jni-helpers.c,
        kaffe/kaffevm/jni/jni-string.c: Updated to unveil all object
        references passed as arguments.

        * kaffe/kaffevm/jni/jni.c: Moved out references handling.

        * kaffe/kaffevm/jni/jni_funcs.h: Added new JNI exported functions.

        * kaffe/kaffevm/jni/jni_i.h
        (unveil): New function.

        * kaffe/kaffevm/jni/jni-refs.c: New file.

Members: 
        ChangeLog:1.4222->1.4223 
        WHATSNEW:1.43->1.44 
        kaffe/kaffevm/gc.h:1.32->1.33 
        kaffe/kaffevm/gcFuncs.c:1.76->1.77 
        kaffe/kaffevm/javacall.c:1.1->1.2 
        kaffe/kaffevm/intrp/methodcalls.c:1.9->1.10 
        kaffe/kaffevm/jit/native-wrapper.c:1.10->1.11 
        kaffe/kaffevm/jni/Makefile.am:1.6->1.7 
        kaffe/kaffevm/jni/Makefile.in:1.40->1.41 
        kaffe/kaffevm/jni/jni-arrays.c:1.8->1.9 
        kaffe/kaffevm/jni/jni-callmethod.c:1.7->1.8 
        kaffe/kaffevm/jni/jni-fields.c:1.5->1.6 
        kaffe/kaffevm/jni/jni-helpers.c:1.6->1.7 
        kaffe/kaffevm/jni/jni-refs.c:INITIAL->1.1 
        kaffe/kaffevm/jni/jni-string.c:1.11->1.12 
        kaffe/kaffevm/jni/jni.c:1.34->1.35 
        kaffe/kaffevm/jni/jni_funcs.h:1.9->1.10 
        kaffe/kaffevm/jni/jni_i.h:1.8->1.9 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.4222 kaffe/ChangeLog:1.4223
--- kaffe/ChangeLog:1.4222      Mon Jul  4 15:46:14 2005
+++ kaffe/ChangeLog     Tue Jul  5 17:20:35 2005
@@ -1,3 +1,43 @@
+2005-07-05  Guilhem Lavaux  <[EMAIL PROTECTED]>
+
+       * WHATSNEW: Added changes to JNI interface.
+
+       * kaffe/kaffevm/gc.h,
+       kaffe/kaffevm/gcFuncs.c: Added new type KGC_ALLOC_VMWEAKREF.
+
+       * kaffe/kaffevm/javacall.c
+       (KaffeVM_classMethodA, KaffeVM_callMethodV):
+       Unveil an object reference passed into
+       arguments if needed.
+
+       * kaffe/kaffevm/intrp/methodcalls.c
+       (engine_callMethod): Unveil the return value if it is an object
+       reference.
+       
+       * kaffe/kaffevm/jit/native-wrapper.c
+       (Kaffe_wrapper): Added some JIT pseudo-code to unveil object
+       stored into weak references.
+       
+       * kaffe/kaffevm/jni/Makefile.am: Added jni-refs.c
+       
+       * kaffe/kaffevm/jni/Makefile.in: Regenerated.
+       
+       * kaffe/kaffevm/jni/jni-arrays.c,
+       kaffe/kaffevm/jni/jni-callmethod.c,
+       kaffe/kaffevm/jni/jni-fields.c,
+       kaffe/kaffevm/jni/jni-helpers.c,
+       kaffe/kaffevm/jni/jni-string.c: Updated to unveil all object
+       references passed as arguments.
+       
+       * kaffe/kaffevm/jni/jni.c: Moved out references handling.
+
+       * kaffe/kaffevm/jni/jni_funcs.h: Added new JNI exported functions.
+
+       * kaffe/kaffevm/jni/jni_i.h
+       (unveil): New function.
+
+       * kaffe/kaffevm/jni/jni-refs.c: New file.
+       
 2005-07-04  Dalibor Topic  <[EMAIL PROTECTED]>
 
        Resynced with GNU Classpath.
Index: kaffe/WHATSNEW
diff -u kaffe/WHATSNEW:1.43 kaffe/WHATSNEW:1.44
--- kaffe/WHATSNEW:1.43 Wed Jun 15 15:35:26 2005
+++ kaffe/WHATSNEW      Tue Jul  5 17:20:38 2005
@@ -7,6 +7,7 @@
   for the Java Extension Mechanism and the Java security
   model.
 * Force double precision on x86 FPU for Linux OS.
+* JIT3/PowerPC operational on Darwin/OSX.
 
 What's New in Kaffe 1.1.5
 ------------------------------------------------------
Index: kaffe/kaffe/kaffevm/gc.h
diff -u kaffe/kaffe/kaffevm/gc.h:1.32 kaffe/kaffe/kaffevm/gc.h:1.33
--- kaffe/kaffe/kaffevm/gc.h:1.32       Thu Jun 23 16:43:58 2005
+++ kaffe/kaffe/kaffevm/gc.h    Tue Jul  5 17:20:40 2005
@@ -46,6 +46,7 @@
        KGC_ALLOC_REFARRAY,
        KGC_ALLOC_FINALIZEOBJECT,
        KGC_ALLOC_JAVALOADER,
+       KGC_ALLOC_VMWEAKREF,
 
        /* allocation types related to the translator engines */
        KGC_ALLOC_JITCODE,
Index: kaffe/kaffe/kaffevm/gcFuncs.c
diff -u kaffe/kaffe/kaffevm/gcFuncs.c:1.76 kaffe/kaffe/kaffevm/gcFuncs.c:1.77
--- kaffe/kaffe/kaffevm/gcFuncs.c:1.76  Mon Jun 13 15:44:44 2005
+++ kaffe/kaffe/kaffevm/gcFuncs.c       Tue Jul  5 17:20:40 2005
@@ -747,6 +747,7 @@
        KGC_registerFixedTypeByIndex(gc, KGC_ALLOC_JIT_SLOTS, "jit-slots");
        KGC_registerFixedTypeByIndex(gc, KGC_ALLOC_JIT_CODEBLOCK, 
"jit-codeblock");
        KGC_registerFixedTypeByIndex(gc, KGC_ALLOC_JIT_LABELS, "jit-labels");
+       KGC_registerFixedTypeByIndex(gc, KGC_ALLOC_VMWEAKREF, "vm-weak-ref");
 
        DBG(INIT, dprintf("initCollector() done\n"); );
        return (gc);
Index: kaffe/kaffe/kaffevm/javacall.c
diff -u kaffe/kaffe/kaffevm/javacall.c:1.1 kaffe/kaffe/kaffevm/javacall.c:1.2
--- kaffe/kaffe/kaffevm/javacall.c:1.1  Thu Jun 23 16:43:58 2005
+++ kaffe/kaffe/kaffevm/javacall.c      Tue Jul  5 17:20:40 2005
@@ -40,6 +40,7 @@
 #include "jthread.h"
 #include "methodcalls.h"
 #include "native.h"
+#include "jni_i.h"
 
 /* This is defined in the alpha port.  It causes all integer arguments
    to be promoted to jlong, and all jfloats to be promoted to jdouble,
@@ -222,7 +223,7 @@
                        /* fall through */
                case 'L':
                        call.callsize[i] = PTR_TYPE_SIZE / SIZEOF_INT;
-                       call.args[i] = args[j];
+                       call.args[i].l = unveil(args[j].l);
                        break;
                default:
                        KAFFEVM_ABORT();
@@ -364,6 +365,7 @@
                case 'L':
                        call.callsize[i] = PTR_TYPE_SIZE / SIZEOF_INT;
                        call.args[i].l = va_arg(args, jref);
+                       call.args[i].l = unveil(call.args[i].l);
                        break;
                default:
                        KAFFEVM_ABORT();
Index: kaffe/kaffe/kaffevm/intrp/methodcalls.c
diff -u kaffe/kaffe/kaffevm/intrp/methodcalls.c:1.9 
kaffe/kaffe/kaffevm/intrp/methodcalls.c:1.10
--- kaffe/kaffe/kaffevm/intrp/methodcalls.c:1.9 Sat May  7 16:20:11 2005
+++ kaffe/kaffe/kaffevm/intrp/methodcalls.c     Tue Jul  5 17:20:40 2005
@@ -25,6 +25,7 @@
 #include "slots.h"
 #include "soft.h"
 #include "external.h"
+#include "jni_i.h"
 
 void *
 engine_buildTrampoline (Method *meth, void **where, errorInfo *einfo UNUSED)
@@ -177,6 +178,8 @@
 
                /* If we have a pending exception and this is JNI, throw it */
                if ((meth->accflags & ACC_JNI) != 0) {
+                       if (call->rettype == 'L')
+                               call->ret->l = unveil(call->ret->l);
                        finishJNIcall();
                        thread_data->exceptObj = save_except;
                }
Index: kaffe/kaffe/kaffevm/jit/native-wrapper.c
diff -u kaffe/kaffe/kaffevm/jit/native-wrapper.c:1.10 
kaffe/kaffe/kaffevm/jit/native-wrapper.c:1.11
--- kaffe/kaffe/kaffevm/jit/native-wrapper.c:1.10       Mon May 30 09:24:00 2005
+++ kaffe/kaffe/kaffevm/jit/native-wrapper.c    Tue Jul  5 17:20:41 2005
@@ -86,6 +86,7 @@
        int count;
        nativeCodeInfo ncode;
        SlotInfo* tmp = NULL;
+       SlotInfo* tmp2 = NULL;
        bool success = true;
        int j;
        int an;
@@ -319,6 +320,32 @@
                        mon_exit(xmeth, local(0));
                }
                if (use_JNI) {
+                       slot_alloctmp(tmp2);
+                 
+#if SIZEOF_VOID_P == SIZEOF_INT
+                       and_int_const(tmp2, tmp, 1);
+#elif SIZEOF_VOID_P == SIZEOF_LONG
+                       and_long_const(tmp2, tmp, 1);
+#else
+#error "Unsupported size of pointer"
+#endif
+                       end_sub_block();
+                       begin_sync();
+                       cbranch_int_const_eq(tmp2, 0, reference_label(1, 1));
+                       end_sync();
+                       
+                       start_sub_block();
+#if SIZEOF_VOID_P == SIZEOF_INT
+                       and_int_const(tmp2, tmp, ~(uintp)1);
+#elif SIZEOF_VOID_P == SIZEOF_LONG
+                       and_long_const(tmp2, tmp, ~(uintp)1);
+#else
+#error "Unsupported size of pointer"
+#endif
+                       load_ref(tmp, tmp2);
+                       slot_freetmp(tmp2);
+                       end_sub_block();
+                       set_label(1, 1);
                        end_sub_block();
                        call_soft(finishJNIcall);
                        start_sub_block();
@@ -437,6 +464,7 @@
        globalMethod = NULL;
 
        leaveTranslator();
+
 #if defined(KAFFE_FEEDBACK)
        if( kaffe_feedback_file )
                unlockMutex(kaffe_feedback_file);
Index: kaffe/kaffe/kaffevm/jni/Makefile.am
diff -u kaffe/kaffe/kaffevm/jni/Makefile.am:1.6 
kaffe/kaffe/kaffevm/jni/Makefile.am:1.7
--- kaffe/kaffe/kaffevm/jni/Makefile.am:1.6     Mon Jul  5 16:40:46 2004
+++ kaffe/kaffe/kaffevm/jni/Makefile.am Tue Jul  5 17:20:41 2005
@@ -31,7 +31,8 @@
        jni-fields.c \
        jni-arrays.c \
        jni-string.c \
-       jni-helpers.c
+       jni-helpers.c \
+       jni-refs.c
 
 noinst_HEADERS= \
        jni_i.h \
Index: kaffe/kaffe/kaffevm/jni/Makefile.in
diff -u kaffe/kaffe/kaffevm/jni/Makefile.in:1.40 
kaffe/kaffe/kaffevm/jni/Makefile.in:1.41
--- kaffe/kaffe/kaffevm/jni/Makefile.in:1.40    Sat May 14 21:46:35 2005
+++ kaffe/kaffe/kaffevm/jni/Makefile.in Tue Jul  5 17:20:41 2005
@@ -80,7 +80,8 @@
 LTLIBRARIES = $(noinst_LTLIBRARIES)
 libkaffejni_la_LIBADD =
 am_libkaffejni_la_OBJECTS = jni.lo jni-base.lo jni-callmethod.lo \
-       jni-fields.lo jni-arrays.lo jni-string.lo jni-helpers.lo
+       jni-fields.lo jni-arrays.lo jni-string.lo jni-helpers.lo \
+       jni-refs.lo
 libkaffejni_la_OBJECTS = $(am_libkaffejni_la_OBJECTS)
 DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/config
 depcomp = $(SHELL) $(top_srcdir)/scripts/depcomp
@@ -397,7 +398,8 @@
        jni-fields.c \
        jni-arrays.c \
        jni-string.c \
-       jni-helpers.c
+       jni-helpers.c \
+       jni-refs.c
 
 noinst_HEADERS = \
        jni_i.h \
@@ -460,6 +462,7 @@
 @AMDEP_TRUE@@am__include@ @[EMAIL PROTECTED]/$(DEPDIR)/[EMAIL PROTECTED]@
 @AMDEP_TRUE@@am__include@ @[EMAIL PROTECTED]/$(DEPDIR)/[EMAIL PROTECTED]@
 @AMDEP_TRUE@@am__include@ @[EMAIL PROTECTED]/$(DEPDIR)/[EMAIL PROTECTED]@
[EMAIL PROTECTED]@@am__include@ @[EMAIL PROTECTED]/$(DEPDIR)/[EMAIL PROTECTED]@
 @AMDEP_TRUE@@am__include@ @[EMAIL PROTECTED]/$(DEPDIR)/[EMAIL PROTECTED]@
 @AMDEP_TRUE@@am__include@ @[EMAIL PROTECTED]/$(DEPDIR)/[EMAIL PROTECTED]@
 
Index: kaffe/kaffe/kaffevm/jni/jni-arrays.c
diff -u kaffe/kaffe/kaffevm/jni/jni-arrays.c:1.8 
kaffe/kaffe/kaffevm/jni/jni-arrays.c:1.9
--- kaffe/kaffe/kaffevm/jni/jni-arrays.c:1.8    Mon May 30 09:24:01 2005
+++ kaffe/kaffe/kaffevm/jni/jni-arrays.c        Tue Jul  5 17:20:41 2005
@@ -28,6 +28,7 @@
 
   BEGIN_EXCEPTION_HANDLING(NULL);
 
+  arr = unveil(arr);
   if (elem >= (jsize)obj_length((HArrayOfObject*)arr)) {
     throwException(ArrayIndexOutOfBoundsException);
   }
@@ -43,6 +44,9 @@
 {
   BEGIN_EXCEPTION_HANDLING_VOID();
 
+  arr = unveil(arr);
+  val = unveil(val);
+
   if (elem >= (jsize)obj_length((HArrayOfObject*)arr)) {
     throwException(ArrayIndexOutOfBoundsException);
   }
@@ -59,6 +63,8 @@
 
   BEGIN_EXCEPTION_HANDLING(NULL);
 
+  cls = unveil(cls);
+  init = unveil(init);
   obj = (HArrayOfObject*)newArray((Hjava_lang_Class*)cls, len);
 
   /* I assume this is what init is for */
@@ -189,6 +195,7 @@
   jboolean* array;
   BEGIN_EXCEPTION_HANDLING(NULL);
 
+  arr = unveil(arr);
   if (iscopy != NULL) {
     *iscopy = JNI_FALSE;
   }
@@ -204,6 +211,7 @@
   jbyte* array;
   BEGIN_EXCEPTION_HANDLING(NULL);
 
+  arr = unveil(arr);
   if (iscopy != NULL) {
     *iscopy = JNI_FALSE;
   }
@@ -224,7 +232,8 @@
 {
   jchar* array;
   BEGIN_EXCEPTION_HANDLING(NULL);
-
+  
+  arr = unveil(arr);
   if (iscopy != NULL) {
     *iscopy = JNI_FALSE;
   }
@@ -240,6 +249,7 @@
   jshort* array;
   BEGIN_EXCEPTION_HANDLING(NULL);
 
+  arr = unveil(arr);
   if (iscopy != NULL) {
     *iscopy = JNI_FALSE;
   }
@@ -255,6 +265,7 @@
   jint* array;
   BEGIN_EXCEPTION_HANDLING(NULL);
 
+  arr = unveil(arr);
   if (iscopy != NULL) {
     *iscopy = JNI_FALSE;
   }
@@ -270,6 +281,7 @@
   jlong* array;
   BEGIN_EXCEPTION_HANDLING(NULL);
 
+  arr = unveil(arr);
   if (iscopy != NULL) {
     *iscopy = JNI_FALSE;
   }
@@ -285,6 +297,7 @@
   jfloat* array;
   BEGIN_EXCEPTION_HANDLING(NULL);
 
+  arr = unveil(arr);
   if (iscopy != NULL) {
     *iscopy = JNI_FALSE;
   }
@@ -300,6 +313,7 @@
   jdouble* array;
   BEGIN_EXCEPTION_HANDLING(NULL);
 
+  arr = unveil(arr);
   if (iscopy != NULL) {
     *iscopy = JNI_FALSE;
   }
@@ -314,6 +328,7 @@
 {
   BEGIN_EXCEPTION_HANDLING_VOID();
 
+  arr = unveil(arr);
   if (elems != unhand_array((HArrayOfBoolean*)arr)->body) {
     switch (mode) {
     case JNI_COMMIT:
@@ -338,6 +353,7 @@
 {
   BEGIN_EXCEPTION_HANDLING_VOID();
 
+  arr = unveil(arr);
   if (elems != unhand_array((HArrayOfByte*)arr)->body) {
     switch (mode) {
     case JNI_COMMIT:
@@ -368,6 +384,7 @@
 {
   BEGIN_EXCEPTION_HANDLING_VOID();
 
+  arr = unveil(arr);
   if (elems != unhand_array((HArrayOfChar*)arr)->body) {
     switch (mode) {
     case JNI_COMMIT:
@@ -392,6 +409,7 @@
 {
   BEGIN_EXCEPTION_HANDLING_VOID();
 
+  arr = unveil(arr);
   if (elems != unhand_array((HArrayOfShort*)arr)->body) {
     switch (mode) {
     case JNI_COMMIT:
@@ -416,6 +434,7 @@
 {
   BEGIN_EXCEPTION_HANDLING_VOID();
 
+  arr = unveil(arr);
   if (elems != unhand_array((HArrayOfInt*)arr)->body) {
     switch (mode) {
     case JNI_COMMIT:
@@ -440,6 +459,7 @@
 {
   BEGIN_EXCEPTION_HANDLING_VOID();
 
+  arr = unveil(arr);
   if (elems != unhand_array((HArrayOfLong*)arr)->body) {
     switch (mode) {
     case JNI_COMMIT:
@@ -464,6 +484,7 @@
 {
   BEGIN_EXCEPTION_HANDLING_VOID();
 
+  arr = unveil(arr);
   if (elems != unhand_array((HArrayOfFloat*)arr)->body) {
     switch (mode) {
     case JNI_COMMIT:
@@ -488,6 +509,7 @@
 {
   BEGIN_EXCEPTION_HANDLING_VOID();
 
+  arr = unveil(arr);
   if (elems != unhand_array((HArrayOfDouble*)arr)->body) {
     switch (mode) {
     case JNI_COMMIT:
@@ -512,6 +534,7 @@
 {
   BEGIN_EXCEPTION_HANDLING_VOID();
 
+  arr = unveil(arr);
   if (start >= obj_length((HArrayOfBoolean*)arr) || start + len > 
obj_length((HArrayOfBoolean*)arr)) {
     throwException(ArrayIndexOutOfBoundsException);
   }
@@ -525,6 +548,7 @@
 {
   BEGIN_EXCEPTION_HANDLING_VOID();
 
+  arr = unveil(arr);
   if (start >= obj_length((HArrayOfByte*)arr) || start + len > 
obj_length((HArrayOfByte*)arr)) {
     throwException(ArrayIndexOutOfBoundsException);
   }
@@ -538,6 +562,7 @@
 {
   BEGIN_EXCEPTION_HANDLING_VOID();
 
+  arr = unveil(arr);
   if (start >= obj_length((HArrayOfChar*)arr) || start + len > 
obj_length((HArrayOfChar*)arr)) {
     throwException(ArrayIndexOutOfBoundsException);
   }
@@ -551,6 +576,7 @@
 {
   BEGIN_EXCEPTION_HANDLING_VOID();
 
+  arr = unveil(arr);
   if (start >= obj_length((HArrayOfShort*)arr) || start + len > 
obj_length((HArrayOfShort*)arr)) {
     throwException(ArrayIndexOutOfBoundsException);
   }
@@ -564,6 +590,7 @@
 {
   BEGIN_EXCEPTION_HANDLING_VOID();
 
+  arr = unveil(arr);
   if (start >= obj_length((HArrayOfInt*)arr) || start + len > 
obj_length((HArrayOfInt*)arr)) {
     throwException(ArrayIndexOutOfBoundsException);
   }
@@ -577,6 +604,7 @@
 {
   BEGIN_EXCEPTION_HANDLING_VOID();
 
+  arr = unveil(arr);
   if (start >= obj_length((HArrayOfLong*)arr) || start + len > 
obj_length((HArrayOfLong*)arr)) {
     throwException(ArrayIndexOutOfBoundsException);
   }
@@ -590,6 +618,7 @@
 {
   BEGIN_EXCEPTION_HANDLING_VOID();
 
+  arr = unveil(arr);
   if (start >= obj_length((HArrayOfFloat*)arr) || start + len > 
obj_length((HArrayOfFloat*)arr)) {
     throwException(ArrayIndexOutOfBoundsException);
   }
@@ -603,6 +632,7 @@
 {
   BEGIN_EXCEPTION_HANDLING_VOID();
 
+  arr = unveil(arr);
   if (start >= obj_length((HArrayOfDouble*)arr) || start + len > 
obj_length((HArrayOfDouble*)arr)) {
     throwException(ArrayIndexOutOfBoundsException);
   }
@@ -616,6 +646,7 @@
 {
   BEGIN_EXCEPTION_HANDLING_VOID();
 
+  arr = unveil(arr);
   if (start >= obj_length((HArrayOfBoolean*)arr) || start+len > 
obj_length((HArrayOfBoolean*)arr)) {
     throwException(ArrayIndexOutOfBoundsException);
   }
@@ -629,6 +660,7 @@
 {
   BEGIN_EXCEPTION_HANDLING_VOID();
 
+  arr = unveil(arr);
   if (start >= obj_length((HArrayOfByte*)arr) || start+len > 
obj_length((HArrayOfByte*)arr)) {
     throwException(ArrayIndexOutOfBoundsException);
   }
@@ -642,6 +674,7 @@
 {
   BEGIN_EXCEPTION_HANDLING_VOID();
 
+  arr = unveil(arr);
   if (start >= obj_length((HArrayOfChar*)arr) || start+len > 
obj_length((HArrayOfChar*)arr)) {
     throwException(ArrayIndexOutOfBoundsException);
   }
@@ -655,6 +688,7 @@
 {
   BEGIN_EXCEPTION_HANDLING_VOID();
 
+  arr = unveil(arr);
   if (start >= obj_length((HArrayOfShort*)arr) || start+len > 
obj_length((HArrayOfShort*)arr)) {
     throwException(ArrayIndexOutOfBoundsException);
   }
@@ -668,6 +702,7 @@
 {
   BEGIN_EXCEPTION_HANDLING_VOID();
 
+  arr = unveil(arr);
   if (start >= obj_length((HArrayOfInt*)arr) || start+len > 
obj_length((HArrayOfInt*)arr)) {
     throwException(ArrayIndexOutOfBoundsException);
   }
@@ -681,6 +716,7 @@
 {
   BEGIN_EXCEPTION_HANDLING_VOID();
 
+  arr = unveil(arr);
   if (start >= obj_length((HArrayOfLong*)arr) || start+len > 
obj_length((HArrayOfLong*)arr)) {
     throwException(ArrayIndexOutOfBoundsException);
   }
@@ -693,7 +729,8 @@
 KaffeJNI_SetFloatArrayRegion(JNIEnv* env UNUSED, jfloatArray arr, jsize start, 
jsize len, jfloat* data)
 {
   BEGIN_EXCEPTION_HANDLING_VOID();
-
+  
+  arr = unveil(arr);
   if (start >= obj_length((HArrayOfFloat*)arr) || start+len > 
obj_length((HArrayOfFloat*)arr)) {
     throwException(ArrayIndexOutOfBoundsException);
   }
@@ -707,6 +744,7 @@
 {
   BEGIN_EXCEPTION_HANDLING_VOID();
 
+  arr = unveil(arr);
   if (start >= obj_length((HArrayOfDouble*)arr) || start+len > 
obj_length((HArrayOfDouble*)arr)) {
     throwException(ArrayIndexOutOfBoundsException);
   }
Index: kaffe/kaffe/kaffevm/jni/jni-callmethod.c
diff -u kaffe/kaffe/kaffevm/jni/jni-callmethod.c:1.7 
kaffe/kaffe/kaffevm/jni/jni-callmethod.c:1.8
--- kaffe/kaffe/kaffevm/jni/jni-callmethod.c:1.7        Sat May  7 16:20:12 2005
+++ kaffe/kaffe/kaffevm/jni/jni-callmethod.c    Tue Jul  5 17:20:41 2005
@@ -57,7 +57,7 @@
 void
 KaffeJNI_CallVoidMethodV(JNIEnv* env UNUSED, jobject obj, jmethodID meth, 
va_list args)
 {
-  Hjava_lang_Object* o = (Hjava_lang_Object*)obj;
+  Hjava_lang_Object* o = (Hjava_lang_Object*)unveil(obj);
   Method* m = (Method*)meth;
 
   BEGIN_EXCEPTION_HANDLING_VOID();
@@ -66,7 +66,12 @@
     throwException(NoSuchMethodError(m->name->data));
   }
 
-  KaffeVM_callMethodV(m, getMethodFunc (m, o), obj, args, NULL);
+  /*
+   * callMethodA will have to unveil the objects contained in the argument 
lists.
+   * This is not really pretty but more efficient because we do not parse the 
signature
+   * twice.
+   */
+  KaffeVM_callMethodV(m, getMethodFunc (m, o), o, args, NULL);
 
   END_EXCEPTION_HANDLING();
 }
@@ -88,7 +93,7 @@
 void
 KaffeJNI_CallVoidMethodA(JNIEnv* env UNUSED, jobject obj, jmethodID meth, 
jvalue* args)
 {
-  Hjava_lang_Object* o = (Hjava_lang_Object*)obj;
+  Hjava_lang_Object* o = (Hjava_lang_Object*)unveil(obj);
   Method* m = (Method*)meth;
 
   BEGIN_EXCEPTION_HANDLING_VOID();
@@ -97,7 +102,12 @@
     throwException(NoSuchMethodError(m->name->data));
   }
 
-  KaffeVM_callMethodA(m, getMethodFunc (m, o), obj, args, NULL, 0);
+  /*
+   * callMethodA will have to unveil the objects contained in the argument 
lists.
+   * This is not really pretty but more efficient because we do not parse the 
signature
+   * twice.
+   */
+  KaffeVM_callMethodA(m, getMethodFunc (m, o), o, args, NULL, 0);
 
   END_EXCEPTION_HANDLING();
 }
@@ -119,6 +129,7 @@
     throwException(NoSuchMethodError(m->name->data));
   }
 
+  obj = unveil(obj);
   KaffeVM_callMethodV(m, METHOD_NATIVECODE(m), obj, args, &retval);
 
   ADD_REF(retval.l);
@@ -149,7 +160,8 @@
   Method* m = (Method*)meth;
 
   BEGIN_EXCEPTION_HANDLING(NULL);
-
+  
+  obj = unveil(obj);
   if (METHOD_IS_STATIC(m)) {
     throwException(NoSuchMethodError(m->name->data));
   }
@@ -174,6 +186,7 @@
 
   BEGIN_EXCEPTION_HANDLING(0);
 
+  obj = unveil(obj);
   if (METHOD_IS_STATIC(m)) {
     throwException(NoSuchMethodError(m->name->data));
   }
@@ -208,6 +221,7 @@
 
   BEGIN_EXCEPTION_HANDLING(0);
 
+  obj = unveil(obj);
   if (METHOD_IS_STATIC(m)) {
     throwException(NoSuchMethodError(m->name->data));
   }
@@ -230,6 +244,7 @@
 
   BEGIN_EXCEPTION_HANDLING(0);
 
+  obj = unveil(obj);
   if (METHOD_IS_STATIC(m)) {
     throwException(NoSuchMethodError(m->name->data));
   }
@@ -264,6 +279,7 @@
 
   BEGIN_EXCEPTION_HANDLING(0);
 
+  obj = unveil(obj);
   if (METHOD_IS_STATIC(m)) {
     throwException(NoSuchMethodError(m->name->data));
   }
@@ -287,6 +303,7 @@
 
   BEGIN_EXCEPTION_HANDLING(0);
 
+  obj = unveil(obj);
   if (METHOD_IS_STATIC(m)) {
     throwException(NoSuchMethodError(m->name->data));
   }
@@ -321,6 +338,7 @@
 
   BEGIN_EXCEPTION_HANDLING(0);
 
+  obj = unveil(obj);
   if (METHOD_IS_STATIC(m)) {
     throwException(NoSuchMethodError(m->name->data));
   }
@@ -344,6 +362,7 @@
 
   BEGIN_EXCEPTION_HANDLING(0);
 
+  obj = unveil(obj);
   if (METHOD_IS_STATIC(m)) {
     throwException(NoSuchMethodError(m->name->data));
   }
@@ -378,6 +397,7 @@
 
   BEGIN_EXCEPTION_HANDLING(0);
 
+  obj = unveil(obj);
   if (METHOD_IS_STATIC(m)) {
     throwException(NoSuchMethodError(m->name->data));
   }
@@ -401,6 +421,7 @@
 
   BEGIN_EXCEPTION_HANDLING(0);
 
+  obj = unveil(obj);
   if (METHOD_IS_STATIC(m)) {
     throwException(NoSuchMethodError(m->name->data));
   }
@@ -435,6 +456,7 @@
 
   BEGIN_EXCEPTION_HANDLING(0);
 
+  obj = unveil(obj);
   if (METHOD_IS_STATIC(m)) {
     throwException(NoSuchMethodError(m->name->data));
   }
@@ -454,7 +476,7 @@
 KaffeJNI_CallObjectMethodV(JNIEnv* env UNUSED, jobject obj, jmethodID meth, 
va_list args)
 {
   jvalue retval;
-  Hjava_lang_Object* o = (Hjava_lang_Object*)obj;
+  Hjava_lang_Object* o = (Hjava_lang_Object*)unveil(obj);
   Method* m = (Method*)meth;
 
   BEGIN_EXCEPTION_HANDLING(NULL);
@@ -463,7 +485,7 @@
     throwException(NoSuchMethodError(m->name->data));
   }
 
-  KaffeVM_callMethodV(m, getMethodFunc (m, o), obj, args, &retval);
+  KaffeVM_callMethodV(m, getMethodFunc (m, o), o, args, &retval);
 
   ADD_REF(retval.l);
   END_EXCEPTION_HANDLING();
@@ -491,7 +513,7 @@
 KaffeJNI_CallObjectMethodA(JNIEnv* env UNUSED, jobject obj, jmethodID meth, 
jvalue* args)
 {
   jvalue retval;
-  Hjava_lang_Object* o = (Hjava_lang_Object*)obj;
+  Hjava_lang_Object* o = (Hjava_lang_Object*)unveil(obj);
   Method* m = (Method*)meth;
 
   BEGIN_EXCEPTION_HANDLING(NULL);
@@ -500,7 +522,7 @@
     throwException(NoSuchMethodError(m->name->data));
   }
 
-  KaffeVM_callMethodA(m, getMethodFunc (m, o), obj, args, &retval, 0);
+  KaffeVM_callMethodA(m, getMethodFunc (m, o), o, args, &retval, 0);
 
   END_EXCEPTION_HANDLING();
   return (retval.l);
@@ -515,7 +537,7 @@
 KaffeJNI_CallBooleanMethodV(JNIEnv* env UNUSED, jobject obj, jmethodID meth, 
va_list args)
 {
   jvalue retval;
-  Hjava_lang_Object* o = (Hjava_lang_Object*)obj;
+  Hjava_lang_Object* o = (Hjava_lang_Object*)unveil(obj);
   Method* m = (Method*)meth;
 
   BEGIN_EXCEPTION_HANDLING(0);
@@ -524,7 +546,7 @@
     throwException(NoSuchMethodError(m->name->data));
   }
 
-  KaffeVM_callMethodV(m, getMethodFunc (m, o), obj, args, &retval);
+  KaffeVM_callMethodV(m, getMethodFunc (m, o), o, args, &retval);
 
   END_EXCEPTION_HANDLING();
   return ((jboolean) retval.i);
@@ -550,7 +572,7 @@
 KaffeJNI_CallBooleanMethodA(JNIEnv* env UNUSED, jobject obj, jmethodID meth, 
jvalue* args)
 {
   jvalue retval;
-  Hjava_lang_Object* o = (Hjava_lang_Object*)obj;
+  Hjava_lang_Object* o = (Hjava_lang_Object*)unveil(obj);
   Method* m = (Method*)meth;
 
   BEGIN_EXCEPTION_HANDLING(0);
@@ -559,7 +581,7 @@
     throwException(NoSuchMethodError(m->name->data));
   }
 
-  KaffeVM_callMethodA(m, getMethodFunc (m, o), obj, args, &retval, 0);
+  KaffeVM_callMethodA(m, getMethodFunc (m, o), o, args, &retval, 0);
 
   END_EXCEPTION_HANDLING();
   return ((jboolean) retval.i);
@@ -574,7 +596,7 @@
 KaffeJNI_CallByteMethodV(JNIEnv* env UNUSED, jobject obj, jmethodID meth, 
va_list args)
 {
   jvalue retval;
-  Hjava_lang_Object* o = (Hjava_lang_Object*)obj;
+  Hjava_lang_Object* o = (Hjava_lang_Object*)unveil(obj);
   Method* m = (Method*)meth;
 
   BEGIN_EXCEPTION_HANDLING(0);
@@ -583,7 +605,7 @@
     throwException(NoSuchMethodError(m->name->data));
   }
 
-  KaffeVM_callMethodV(m, getMethodFunc (m, o), obj, args, &retval);
+  KaffeVM_callMethodV(m, getMethodFunc (m, o), o, args, &retval);
 
   END_EXCEPTION_HANDLING();
   return ((jbyte) retval.i);
@@ -609,7 +631,7 @@
 KaffeJNI_CallByteMethodA(JNIEnv* env UNUSED, jobject obj, jmethodID meth, 
jvalue* args)
 {
   jvalue retval;
-  Hjava_lang_Object* o = (Hjava_lang_Object*)obj;
+  Hjava_lang_Object* o = (Hjava_lang_Object*)unveil(obj);
   Method* m = (Method*)meth;
 
   BEGIN_EXCEPTION_HANDLING(0);
@@ -633,7 +655,7 @@
 KaffeJNI_CallCharMethodV(JNIEnv* env UNUSED, jobject obj, jmethodID meth, 
va_list args)
 {
   jvalue retval;
-  Hjava_lang_Object* o = (Hjava_lang_Object*)obj;
+  Hjava_lang_Object* o = (Hjava_lang_Object*)unveil(obj);
   Method* m = (Method*)meth;
 
   BEGIN_EXCEPTION_HANDLING(0);
@@ -642,7 +664,7 @@
     throwException(NoSuchMethodError(m->name->data));
   }
 
-  KaffeVM_callMethodV(m, getMethodFunc (m, o), obj, args, &retval);
+  KaffeVM_callMethodV(m, getMethodFunc (m, o), o, args, &retval);
 
   END_EXCEPTION_HANDLING();
   return ((jchar) retval.i);
@@ -668,7 +690,7 @@
 KaffeJNI_CallCharMethodA(JNIEnv* env UNUSED, jobject obj, jmethodID meth, 
jvalue* args)
 {
   jvalue retval;
-  Hjava_lang_Object* o = (Hjava_lang_Object*)obj;
+  Hjava_lang_Object* o = (Hjava_lang_Object*)unveil(obj);
   Method* m = (Method*)meth;
 
   BEGIN_EXCEPTION_HANDLING(0);
@@ -677,7 +699,7 @@
     throwException(NoSuchMethodError(m->name->data));
   }
 
-  KaffeVM_callMethodA(m, getMethodFunc (m, o), obj, args, &retval, 0);
+  KaffeVM_callMethodA(m, getMethodFunc (m, o), o, args, &retval, 0);
 
   END_EXCEPTION_HANDLING();
   return ((jchar) retval.i);
@@ -692,7 +714,7 @@
 KaffeJNI_CallShortMethodV(JNIEnv* env UNUSED, jobject obj, jmethodID meth, 
va_list args)
 {
   jvalue retval;
-  Hjava_lang_Object* o = (Hjava_lang_Object*)obj;
+  Hjava_lang_Object* o = (Hjava_lang_Object*)unveil(obj);
   Method* m = (Method*)meth;
 
   BEGIN_EXCEPTION_HANDLING(0);
@@ -701,7 +723,7 @@
     throwException(NoSuchMethodError(m->name->data));
   }
 
-  KaffeVM_callMethodV(m, getMethodFunc (m, o), obj, args, &retval);
+  KaffeVM_callMethodV(m, getMethodFunc (m, o), o, args, &retval);
 
   END_EXCEPTION_HANDLING();
   return ((jshort) retval.i);
@@ -727,7 +749,7 @@
 KaffeJNI_CallShortMethodA(JNIEnv* env UNUSED, jobject obj, jmethodID meth, 
jvalue* args)
 {
   jvalue retval;
-  Hjava_lang_Object* o = (Hjava_lang_Object*)obj;
+  Hjava_lang_Object* o = (Hjava_lang_Object*)unveil(obj);
   Method* m = (Method*)meth;
 
   BEGIN_EXCEPTION_HANDLING(0);
@@ -736,7 +758,7 @@
     throwException(NoSuchMethodError(m->name->data));
   }
 
-  KaffeVM_callMethodA(m, getMethodFunc (m, o), obj, args, &retval, 0);
+  KaffeVM_callMethodA(m, getMethodFunc (m, o), o, args, &retval, 0);
 
   END_EXCEPTION_HANDLING();
   return ((jshort) retval.i);
@@ -751,7 +773,7 @@
 KaffeJNI_CallIntMethodV(JNIEnv* env UNUSED, jobject obj, jmethodID meth, 
va_list args)
 {
   jvalue retval;
-  Hjava_lang_Object* o = (Hjava_lang_Object*)obj;
+  Hjava_lang_Object* o = (Hjava_lang_Object*)unveil(obj);
   Method* m = (Method*)meth;
 
   BEGIN_EXCEPTION_HANDLING(0);
@@ -760,7 +782,7 @@
     throwException(NoSuchMethodError(m->name->data));
   }
 
-  KaffeVM_callMethodV(m, getMethodFunc (m, o), obj, args, &retval);
+  KaffeVM_callMethodV(m, getMethodFunc (m, o), o, args, &retval);
 
   END_EXCEPTION_HANDLING();
   return (retval.i);
@@ -786,7 +808,7 @@
 KaffeJNI_CallIntMethodA(JNIEnv* env UNUSED, jobject obj, jmethodID meth, 
jvalue* args)
 {
   jvalue retval;
-  Hjava_lang_Object* o = (Hjava_lang_Object*)obj;
+  Hjava_lang_Object* o = (Hjava_lang_Object*)unveil(obj);
   Method* m = (Method*)meth;
 
   BEGIN_EXCEPTION_HANDLING(0);
@@ -795,7 +817,7 @@
     throwException(NoSuchMethodError(m->name->data));
   }
 
-  KaffeVM_callMethodA(m, getMethodFunc (m, o), obj, args, &retval, 0);
+  KaffeVM_callMethodA(m, getMethodFunc (m, o), o, args, &retval, 0);
 
   END_EXCEPTION_HANDLING();
   return (retval.i);
@@ -810,7 +832,7 @@
 KaffeJNI_CallLongMethodV(JNIEnv* env UNUSED, jobject obj, jmethodID meth, 
va_list args)
 {
   jvalue retval;
-  Hjava_lang_Object* o = (Hjava_lang_Object*)obj;
+  Hjava_lang_Object* o = (Hjava_lang_Object*)unveil(obj);
   Method* m = (Method*)meth;
 
   BEGIN_EXCEPTION_HANDLING(0);
@@ -819,7 +841,7 @@
     throwException(NoSuchMethodError(m->name->data));
   }
 
-  KaffeVM_callMethodV(m, getMethodFunc (m, o), obj, args, &retval);
+  KaffeVM_callMethodV(m, getMethodFunc (m, o), o, args, &retval);
 
   END_EXCEPTION_HANDLING();
   return (retval.j);
@@ -845,7 +867,7 @@
 KaffeJNI_CallLongMethodA(JNIEnv* env UNUSED, jobject obj, jmethodID meth, 
jvalue* args)
 {
   jvalue retval;
-  Hjava_lang_Object* o = (Hjava_lang_Object*)obj;
+  Hjava_lang_Object* o = (Hjava_lang_Object*)unveil(obj);
   Method* m = (Method*)meth;
 
   BEGIN_EXCEPTION_HANDLING(0);
@@ -854,7 +876,7 @@
     throwException(NoSuchMethodError(m->name->data));
   }
 
-  KaffeVM_callMethodA(m, getMethodFunc (m, o), obj, args, &retval, 0);
+  KaffeVM_callMethodA(m, getMethodFunc (m, o), o, args, &retval, 0);
 
   END_EXCEPTION_HANDLING();
   return (retval.j);
@@ -869,7 +891,7 @@
 KaffeJNI_CallFloatMethodV(JNIEnv* env UNUSED, jobject obj, jmethodID meth, 
va_list args)
 {
   jvalue retval;
-  Hjava_lang_Object* o = (Hjava_lang_Object*)obj;
+  Hjava_lang_Object* o = (Hjava_lang_Object*)unveil(obj);
   Method* m = (Method*)meth;
 
   BEGIN_EXCEPTION_HANDLING(0);
@@ -878,7 +900,7 @@
     throwException(NoSuchMethodError(m->name->data));
   }
 
-  KaffeVM_callMethodV(m, getMethodFunc (m, o), obj, args, &retval);
+  KaffeVM_callMethodV(m, getMethodFunc (m, o), o, args, &retval);
 
   END_EXCEPTION_HANDLING();
   return (retval.f);
@@ -904,7 +926,7 @@

*** Patch too long, truncated ***

_______________________________________________
kaffe mailing list
[email protected]
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to