Merged revisions 7766-7796 via svnmerge from
[cacao.git] / src / native / jni.c
index 036b13e605c755ab2eeddf468160067505f81410..a011a0f0fe38b729ba56b189f2ebd184a4a47fab 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: jni.c 7392 2007-02-23 20:15:31Z michi $
+   $Id: jni.c 7723 2007-04-16 18:03:08Z michi $
 
 */
 
 
 #include "native/vm/java_lang_Class.h"
 
+#if defined(ENABLE_JAVASE)
+# include "native/vm/java_lang_ClassLoader.h"
+#endif
+
 #if defined(ENABLE_THREADS)
 # include "threads/native/lock.h"
 # include "threads/native/threads.h"
 
 #include "vmcore/loader.h"
 #include "vmcore/options.h"
-#include "vmcore/resolve.h"
+#include "vm/resolve.h"
 #include "vmcore/statistics.h"
 
 
 
 #define HASHTABLE_GLOBAL_REF_SIZE    64 /* initial size of globalref-hash     */
 
-static hashtable *hashtable_global_ref; /* hashtable for globalrefs           */
+hashtable *hashtable_global_ref;        /* hashtable for globalrefs           */
 
 
 /* direct buffer stuff ********************************************************/
@@ -923,8 +927,10 @@ java_objectheader *_Jv_jni_invokeNative(methodinfo *m, java_objectheader *o,
 
        vmargs = MNEW(vm_arg, argcount);
 
-       if (!_Jv_jni_vmargs_from_objectarray(o, resm->parseddesc, vmargs, params))
+       if (!_Jv_jni_vmargs_from_objectarray(o, resm->parseddesc, vmargs, params)) {
+               MFREE(vmargs, vm_arg, argcount);
                return NULL;
+       }
 
        switch (resm->parseddesc->returntype.decltype) {
        case TYPE_VOID:
@@ -1121,11 +1127,11 @@ jclass _Jv_JNI_DefineClass(JNIEnv *env, const char *name, jobject loader,
        STATISTICS(jniinvokation());
 
        cl = (java_lang_ClassLoader *) loader;
-       s  = javastring_new_from_utf_string(name);
+       s  = (java_lang_String *) javastring_new_from_utf_string(name);
        ba = (java_bytearray *) buf;
 
-       c = (jclass) _Jv_java_lang_ClassLoader_defineClass(env, NULL, cl, s, ba,
-                                                                                                          0, bufLen, NULL);
+       c = (jclass) _Jv_java_lang_ClassLoader_defineClass(cl, s, ba, 0, bufLen,
+                                                                                                          NULL);
 
        return (jclass) _Jv_JNI_NewLocalRef(env, (jobject) c);
 #else
@@ -4126,7 +4132,7 @@ u2 *javastring_tou2(jstring so)
 /* GetStringChars **************************************************************
 
    Returns a pointer to the array of Unicode characters of the
-   string. This pointer is valid until ReleaseStringchars() is called.
+   string. This pointer is valid until ReleaseStringChars() is called.
 
 *******************************************************************************/
 
@@ -4173,7 +4179,8 @@ void _Jv_JNI_ReleaseStringChars(JNIEnv *env, jstring str, const jchar *chars)
 
 /* NewStringUTF ****************************************************************
 
-   Constructs a new java.lang.String object from an array of UTF-8 characters.
+   Constructs a new java.lang.String object from an array of UTF-8
+   characters.
 
 *******************************************************************************/
 
@@ -4183,7 +4190,7 @@ jstring _Jv_JNI_NewStringUTF(JNIEnv *env, const char *bytes)
 
        STATISTICS(jniinvokation());
 
-       s = javastring_safe_new_from_utf8(bytes);
+       s = (java_lang_String *) javastring_safe_new_from_utf8(bytes);
 
     return (jstring) _Jv_JNI_NewLocalRef(env, (jobject) s);
 }
@@ -4222,7 +4229,7 @@ const char *_Jv_JNI_GetStringUTFChars(JNIEnv *env, jstring string,
        if (isCopy)
                *isCopy = JNI_TRUE;
        
-       u = javastring_toutf((java_lang_String *) string, false);
+       u = javastring_toutf((java_objectheader *) string, false);
 
        if (u != NULL)
                return u->text;
@@ -4343,10 +4350,8 @@ void _Jv_JNI_SetObjectArrayElement(JNIEnv *env, jobjectArray array,
        /* check if the class of value is a subclass of the element class
           of the array */
 
-       if (!builtin_canstore(oa, o)) {
-               exceptions_throw_arraystoreexception();
+       if (!builtin_canstore(oa, o))
                return;
-       }
 
        oa->data[index] = val;
 }