From 517337a5eeaab7613a15f9e817035936d8f0a0f1 Mon Sep 17 00:00:00 2001 From: twisti Date: Tue, 30 Mar 2004 21:59:27 +0000 Subject: [PATCH] - removed unused exception class_ declarations - added exception string_'s for code generation - new_exception* functions to instantiate runtime exceptions --- native.c | 226 +++++++++++++++++++++++--------------------- src/native/native.c | 226 +++++++++++++++++++++++--------------------- 2 files changed, 232 insertions(+), 220 deletions(-) diff --git a/native.c b/native.c index fad84c734..dff220b96 100644 --- a/native.c +++ b/native.c @@ -31,7 +31,7 @@ The .hh files created with the header file generator are all included here as are the C functions implementing these methods. - $Id: native.c 991 2004-03-29 11:22:34Z stefan $ + $Id: native.c 998 2004-03-30 21:59:27Z twisti $ */ @@ -60,6 +60,8 @@ #include "threads/thread.h" #include "threads/threadio.h" #include "threads/locks.h" +#include "nat/java_lang_VMClass.h" +#include "nat/java_lang_Throwable.h" /* Include files for IO functions */ @@ -83,31 +85,11 @@ char *classpath; classinfo *class_java_lang_Class; classinfo *class_java_lang_VMClass; -methodinfo *method_vmclass_init; /* static classinfo *class_java_lang_Cloneable=0; */ /* now in global.h */ -classinfo *class_java_lang_CloneNotSupportedException; classinfo *class_java_lang_System; classinfo *class_java_lang_ClassLoader; classinfo *class_gnu_java_lang_SystemClassLoader; -classinfo *class_java_lang_NoClassDefFoundError; -classinfo *class_java_lang_ClassNotFoundException; -classinfo *class_java_lang_LinkageError; -classinfo *class_java_lang_InstantiationException; -classinfo *class_java_lang_NoSuchMethodError; -classinfo *class_java_lang_NoSuchFieldError; -classinfo *class_java_lang_ClassFormatError; -classinfo *class_java_lang_IllegalArgumentException; -classinfo *class_java_lang_ArrayIndexOutOfBoundsException; -classinfo *class_java_lang_NoSuchFieldException; -classinfo *class_java_io_SyncFailedException; -classinfo *class_java_io_IOException; -classinfo *class_java_io_FileNotFoundException; -classinfo *class_java_io_UnixFileSystem; -classinfo *class_java_security_PrivilegedActionException; classinfo *class_java_lang_SecurityManager; -classinfo *class_java_net_UnknownHostException; -classinfo *class_java_net_SocketException; -classinfo *class_java_lang_NoSuchMethodException; classinfo *class_java_lang_Double; classinfo *class_java_lang_Float; classinfo *class_java_lang_Long; @@ -118,34 +100,67 @@ classinfo *class_java_lang_Void; classinfo *class_java_lang_Character; classinfo *class_java_lang_Integer; +methodinfo *method_vmclass_init; + /* specify some exception strings for code generation */ -char *string_java_lang_NoClassDefFoundError = - "java/lang/NoClassDefFoundError"; -char *string_java_lang_LinkageError = - "java/lang/LinkageError"; +char *string_java_lang_ArithmeticException = + "java/lang/ArithmeticException"; + +char *string_java_lang_ArithmeticException_message = + "/ by zero"; char *string_java_lang_ArrayIndexOutOfBoundsException = "java/lang/ArrayIndexOutOfBoundsException"; -char *string_java_lang_NegativeArraySizeException = - "java/lang/NegativeArraySizeException"; +char *string_java_lang_ArrayStoreException = + "java/lang/ArrayStoreException"; char *string_java_lang_ClassCastException = "java/lang/ClassCastException"; -char *string_java_lang_ArithmeticException = - "java/lang/ArithmeticException"; +char *string_java_lang_ClassNotFoundException = + "java/lang/ClassNotFoundException"; -char *string_java_lang_ArithmeticException_message = - "/ by zero"; +char *string_java_lang_CloneNotSupportedException = + "java/lang/CloneNotSupportedException"; + +char *string_java_lang_IllegalArgumentException = + "java/lang/IllegalArgumentException"; + +char *string_java_lang_NegativeArraySizeException = + "java/lang/NegativeArraySizeException"; + +char *string_java_lang_NoSuchFieldException = + "java/lang/NoSuchFieldException"; + +char *string_java_lang_NoSuchMethodException = + "java/lang/NoSuchMethodException"; char *string_java_lang_NullPointerException = "java/lang/NullPointerException"; -char *string_java_lang_ArrayStoreException = - "java/lang/ArrayStoreException"; + +/* specify some error strings for code generation */ + +char *string_java_lang_ClassFormatError = + "java/lang/ClassFormatError"; + +char *string_java_lang_LinkageError = + "java/lang/LinkageError"; + +char *string_java_lang_NoClassDefFoundError = + "java/lang/NoClassDefFoundError"; + +char *string_java_lang_NoSuchFieldError = + "java/lang/NoSuchFieldError"; + +char *string_java_lang_NoSuchMethodError = + "java/lang/NoSuchMethodError"; + +char *string_java_lang_OutOfMemoryError = + "java/lang/OutOfMemoryError"; /* the system classloader object */ @@ -263,52 +278,81 @@ static bool nativecompdone = false; /*--------------- native method calls & classes used -------------------------*/ +void throw_exception_exit() +{ + java_lang_String *message; + + if (*exceptionptr) { + printf("Exception in thread \"main\" "); + utf_display_classname((*exceptionptr)->vftbl->class->name); + + /* do we have a detail message? */ + message = ((java_lang_Throwable *) *exceptionptr)->detailMessage; + if (message) { + printf(": "); + utf_display(javastring_toutf(message, false)); + } + printf("\n"); + fflush(stdout); + + /* clear exception, whatever... */ + *exceptionptr = NULL; + + /* good bye! */ + exit(1); + } +} -/* throw some loader exceptions */ -void throw_noclassdeffounderror_message(utf* classname) +java_objectheader *new_exception(char *classname) { - if (!class_java_lang_NoClassDefFoundError) { - panic("java.lang.NoClassDefFoundError not found. Maybe wrong classpath?"); + classinfo *c = class_new(utf_new_char(classname)); + + if (!c->linked) { + printf("Exception class %s not linked! You probably have not set your CLASSPATH properly.\n", classname); + exit(1); } - /* throws a NoClassDefFoundError with message */ - *exceptionptr = native_new_and_init_string(class_java_lang_NoClassDefFoundError, - javastring_new(classname)); + return native_new_and_init(c); } - -void throw_linkageerror_message(utf* classname) +java_objectheader *new_exception_message(char *classname, char *message) { - if (!class_java_lang_LinkageError) { - panic("java.lang.LinkageError not found. Maybe wrong classpath?"); + classinfo *c = class_new(utf_new_char(classname)); + + if (!c->linked) { + printf("Exception class %s not linked! You probably have not set your CLASSPATH properly.\n", classname); + exit(1); } - /* throws a LinkageError with message */ - *exceptionptr = native_new_and_init_string(class_java_lang_LinkageError, - javastring_new(classname)); + return native_new_and_init_string(c, javastring_new_char(message)); } -java_objectheader *new_exception(char *classname) +java_objectheader *new_exception_utfmessage(char *classname, utf *message) { classinfo *c = class_new(utf_new_char(classname)); - if (!c->linked) - panic("exception class not linked"); + if (!c->linked) { + printf("Exception class %s not linked! You probably have not set your CLASSPATH properly.\n", classname); + exit(1); + } - return native_new_and_init(c); + return native_new_and_init_string(c, javastring_new(message)); } -java_objectheader *new_exception_message(char *classname, char *message) + +java_objectheader *new_exception_javastring(char *classname, java_lang_String *message) { classinfo *c = class_new(utf_new_char(classname)); - if (!c->linked) - panic("exception class not linked"); + if (!c->linked) { + printf("Exception class %s not linked! You probably have not set your CLASSPATH properly.\n", classname); + exit(1); + } - return native_new_and_init_string(c, javastring_new_char(message)); + return native_new_and_init_string(c, message); } @@ -316,8 +360,10 @@ java_objectheader *new_exception_int(char *classname, s4 i) { classinfo *c = class_new(utf_new_char(classname)); - if (!c->linked) - panic("exception class not linked"); + if (!c->linked) { + printf("Exception class %s not linked! You probably have not set your CLASSPATH properly.\n", classname); + exit(1); + } return native_new_and_init_int(c, i); } @@ -334,8 +380,6 @@ void native_loadclasses() static int classesLoaded=0; /*temporary hack JoWenn*/ if (classesLoaded) return; classesLoaded = 1; -/* log_text("loadclasses entered");*/ - /*class_java_lang_System =*/ (void) class_new(utf_new_char("java/lang/VMClass"));/*JoWenn*/ @@ -345,56 +389,13 @@ void native_loadclasses() if (!class_java_lang_Cloneable) class_java_lang_Cloneable = class_new(utf_new_char("java/lang/Cloneable")); -/* log_text("loadclasses: class_java_lang_Cloneable has been initialized");*/ - class_java_lang_CloneNotSupportedException = - class_new(utf_new_char("java/lang/CloneNotSupportedException")); + if (!class_java_lang_Class) class_java_lang_Class = class_new(utf_new_char("java/lang/Class")); - class_java_io_IOException = - class_new(utf_new_char("java/io/IOException")); - class_java_io_FileNotFoundException = - class_new(utf_new_char("java/io/FileNotFoundException")); - class_java_lang_NoClassDefFoundError = - class_new(utf_new_char("java/lang/NoClassDefFoundError")); - class_java_lang_ClassNotFoundException = - class_new(utf_new_char("java/lang/ClassNotFoundException")); - class_java_lang_LinkageError = - class_new(utf_new_char("java/lang/LinkageError")); - class_java_lang_InstantiationException = - class_new(utf_new_char("java/lang/InstantiationException")); - class_java_lang_NoSuchMethodError = - class_new(utf_new_char("java/lang/NoSuchMethodError")); - class_java_lang_NoSuchFieldError = - class_new(utf_new_char("java/lang/NoSuchFieldError")); - class_java_lang_ClassFormatError = - class_new(utf_new_char("java/lang/ClassFormatError")); - class_java_io_SyncFailedException = - class_new(utf_new_char("java/io/SyncFailedException")); - -/* log_text("native_loadclasses: class_new(\"java/lang/ClassLoader\")"); */ + class_java_lang_ClassLoader = class_new(utf_new_char("java/lang/ClassLoader")); - class_gnu_java_lang_SystemClassLoader = - class_new(utf_new_char("gnu/java/lang/SystemClassLoader")); - -/* log_text("native_loadclasses: class_new(\"java/security/PrivilegedActionException\")"); */ - class_java_security_PrivilegedActionException = - class_new(utf_new_char("java/security/PrivilegedActionException")); - - loader_load_sysclass(&class_java_net_UnknownHostException, - utf_new_char("java/net/UnknownHostException")); - loader_load_sysclass(&class_java_net_SocketException, - utf_new_char("java/net/SocketException")); - - class_java_lang_IllegalArgumentException = - class_new(utf_new_char("java/lang/IllegalArgumentException")); - class_java_lang_ArrayIndexOutOfBoundsException = - class_new(utf_new_char("java/lang/ArrayIndexOutOfBoundsException")); - class_java_lang_NoSuchFieldException = - class_new(utf_new_char("java/lang/NoSuchFieldException")); - class_java_lang_NoSuchMethodException = - class_new(utf_new_char("java/lang/NoSuchMethodException")); /* load classes for wrapping primitive types */ class_java_lang_Double = class_new(utf_new_char("java/lang/Double")); @@ -457,11 +458,12 @@ void systemclassloader_addlibrary(java_objectheader *o) void init_systemclassloader() { + log_text("init_systemclassloader"); if (!SystemClassLoader) { native_loadclasses(); log_text("Initializing new system class loader"); /* create object and call initializer */ - SystemClassLoader = (java_lang_ClassLoader *) native_new_and_init(class_gnu_java_lang_SystemClassLoader);/*class_java_lang_ClassLoader);*/ + SystemClassLoader = (java_lang_ClassLoader *) native_new_and_init(class_new(utf_new_char("gnu/java/lang/SystemClassLoader"))); /* systemclassloader has no parent */ SystemClassLoader->parent = NULL; @@ -749,6 +751,7 @@ char *javastring_tochar(java_objectheader *so) fieldinfo *class_findfield_approx(classinfo *c, utf *name) { s4 i; + for (i = 0; i < c->fieldscount; i++) { /* compare field names */ if ((c->fields[i].name == name)) @@ -756,22 +759,25 @@ fieldinfo *class_findfield_approx(classinfo *c, utf *name) } /* field was not found, raise exception */ - *exceptionptr = native_new_and_init(class_java_lang_NoSuchFieldException); + *exceptionptr = new_exception(string_java_lang_NoSuchFieldException); return NULL; } -s4 class_findfield_index_approx (classinfo *c, utf *name) + +s4 class_findfield_index_approx(classinfo *c, utf *name) { s4 i; + for (i = 0; i < c->fieldscount; i++) { /* compare field names */ if ((c->fields[i].name == name)) return i; - } + } /* field was not found, raise exception */ - *exceptionptr = native_new_and_init(class_java_lang_NoSuchFieldException); + *exceptionptr = new_exception(string_java_lang_NoSuchFieldException); + return -1; } @@ -890,7 +896,7 @@ java_objectheader *native_new_and_init_int(classinfo *c, s4 i) /* call initializer */ - asm_calljavafunction(m, o, i, NULL, NULL); + asm_calljavafunction(m, o, (void *) i, NULL, NULL); return o; } diff --git a/src/native/native.c b/src/native/native.c index fad84c734..dff220b96 100644 --- a/src/native/native.c +++ b/src/native/native.c @@ -31,7 +31,7 @@ The .hh files created with the header file generator are all included here as are the C functions implementing these methods. - $Id: native.c 991 2004-03-29 11:22:34Z stefan $ + $Id: native.c 998 2004-03-30 21:59:27Z twisti $ */ @@ -60,6 +60,8 @@ #include "threads/thread.h" #include "threads/threadio.h" #include "threads/locks.h" +#include "nat/java_lang_VMClass.h" +#include "nat/java_lang_Throwable.h" /* Include files for IO functions */ @@ -83,31 +85,11 @@ char *classpath; classinfo *class_java_lang_Class; classinfo *class_java_lang_VMClass; -methodinfo *method_vmclass_init; /* static classinfo *class_java_lang_Cloneable=0; */ /* now in global.h */ -classinfo *class_java_lang_CloneNotSupportedException; classinfo *class_java_lang_System; classinfo *class_java_lang_ClassLoader; classinfo *class_gnu_java_lang_SystemClassLoader; -classinfo *class_java_lang_NoClassDefFoundError; -classinfo *class_java_lang_ClassNotFoundException; -classinfo *class_java_lang_LinkageError; -classinfo *class_java_lang_InstantiationException; -classinfo *class_java_lang_NoSuchMethodError; -classinfo *class_java_lang_NoSuchFieldError; -classinfo *class_java_lang_ClassFormatError; -classinfo *class_java_lang_IllegalArgumentException; -classinfo *class_java_lang_ArrayIndexOutOfBoundsException; -classinfo *class_java_lang_NoSuchFieldException; -classinfo *class_java_io_SyncFailedException; -classinfo *class_java_io_IOException; -classinfo *class_java_io_FileNotFoundException; -classinfo *class_java_io_UnixFileSystem; -classinfo *class_java_security_PrivilegedActionException; classinfo *class_java_lang_SecurityManager; -classinfo *class_java_net_UnknownHostException; -classinfo *class_java_net_SocketException; -classinfo *class_java_lang_NoSuchMethodException; classinfo *class_java_lang_Double; classinfo *class_java_lang_Float; classinfo *class_java_lang_Long; @@ -118,34 +100,67 @@ classinfo *class_java_lang_Void; classinfo *class_java_lang_Character; classinfo *class_java_lang_Integer; +methodinfo *method_vmclass_init; + /* specify some exception strings for code generation */ -char *string_java_lang_NoClassDefFoundError = - "java/lang/NoClassDefFoundError"; -char *string_java_lang_LinkageError = - "java/lang/LinkageError"; +char *string_java_lang_ArithmeticException = + "java/lang/ArithmeticException"; + +char *string_java_lang_ArithmeticException_message = + "/ by zero"; char *string_java_lang_ArrayIndexOutOfBoundsException = "java/lang/ArrayIndexOutOfBoundsException"; -char *string_java_lang_NegativeArraySizeException = - "java/lang/NegativeArraySizeException"; +char *string_java_lang_ArrayStoreException = + "java/lang/ArrayStoreException"; char *string_java_lang_ClassCastException = "java/lang/ClassCastException"; -char *string_java_lang_ArithmeticException = - "java/lang/ArithmeticException"; +char *string_java_lang_ClassNotFoundException = + "java/lang/ClassNotFoundException"; -char *string_java_lang_ArithmeticException_message = - "/ by zero"; +char *string_java_lang_CloneNotSupportedException = + "java/lang/CloneNotSupportedException"; + +char *string_java_lang_IllegalArgumentException = + "java/lang/IllegalArgumentException"; + +char *string_java_lang_NegativeArraySizeException = + "java/lang/NegativeArraySizeException"; + +char *string_java_lang_NoSuchFieldException = + "java/lang/NoSuchFieldException"; + +char *string_java_lang_NoSuchMethodException = + "java/lang/NoSuchMethodException"; char *string_java_lang_NullPointerException = "java/lang/NullPointerException"; -char *string_java_lang_ArrayStoreException = - "java/lang/ArrayStoreException"; + +/* specify some error strings for code generation */ + +char *string_java_lang_ClassFormatError = + "java/lang/ClassFormatError"; + +char *string_java_lang_LinkageError = + "java/lang/LinkageError"; + +char *string_java_lang_NoClassDefFoundError = + "java/lang/NoClassDefFoundError"; + +char *string_java_lang_NoSuchFieldError = + "java/lang/NoSuchFieldError"; + +char *string_java_lang_NoSuchMethodError = + "java/lang/NoSuchMethodError"; + +char *string_java_lang_OutOfMemoryError = + "java/lang/OutOfMemoryError"; /* the system classloader object */ @@ -263,52 +278,81 @@ static bool nativecompdone = false; /*--------------- native method calls & classes used -------------------------*/ +void throw_exception_exit() +{ + java_lang_String *message; + + if (*exceptionptr) { + printf("Exception in thread \"main\" "); + utf_display_classname((*exceptionptr)->vftbl->class->name); + + /* do we have a detail message? */ + message = ((java_lang_Throwable *) *exceptionptr)->detailMessage; + if (message) { + printf(": "); + utf_display(javastring_toutf(message, false)); + } + printf("\n"); + fflush(stdout); + + /* clear exception, whatever... */ + *exceptionptr = NULL; + + /* good bye! */ + exit(1); + } +} -/* throw some loader exceptions */ -void throw_noclassdeffounderror_message(utf* classname) +java_objectheader *new_exception(char *classname) { - if (!class_java_lang_NoClassDefFoundError) { - panic("java.lang.NoClassDefFoundError not found. Maybe wrong classpath?"); + classinfo *c = class_new(utf_new_char(classname)); + + if (!c->linked) { + printf("Exception class %s not linked! You probably have not set your CLASSPATH properly.\n", classname); + exit(1); } - /* throws a NoClassDefFoundError with message */ - *exceptionptr = native_new_and_init_string(class_java_lang_NoClassDefFoundError, - javastring_new(classname)); + return native_new_and_init(c); } - -void throw_linkageerror_message(utf* classname) +java_objectheader *new_exception_message(char *classname, char *message) { - if (!class_java_lang_LinkageError) { - panic("java.lang.LinkageError not found. Maybe wrong classpath?"); + classinfo *c = class_new(utf_new_char(classname)); + + if (!c->linked) { + printf("Exception class %s not linked! You probably have not set your CLASSPATH properly.\n", classname); + exit(1); } - /* throws a LinkageError with message */ - *exceptionptr = native_new_and_init_string(class_java_lang_LinkageError, - javastring_new(classname)); + return native_new_and_init_string(c, javastring_new_char(message)); } -java_objectheader *new_exception(char *classname) +java_objectheader *new_exception_utfmessage(char *classname, utf *message) { classinfo *c = class_new(utf_new_char(classname)); - if (!c->linked) - panic("exception class not linked"); + if (!c->linked) { + printf("Exception class %s not linked! You probably have not set your CLASSPATH properly.\n", classname); + exit(1); + } - return native_new_and_init(c); + return native_new_and_init_string(c, javastring_new(message)); } -java_objectheader *new_exception_message(char *classname, char *message) + +java_objectheader *new_exception_javastring(char *classname, java_lang_String *message) { classinfo *c = class_new(utf_new_char(classname)); - if (!c->linked) - panic("exception class not linked"); + if (!c->linked) { + printf("Exception class %s not linked! You probably have not set your CLASSPATH properly.\n", classname); + exit(1); + } - return native_new_and_init_string(c, javastring_new_char(message)); + return native_new_and_init_string(c, message); } @@ -316,8 +360,10 @@ java_objectheader *new_exception_int(char *classname, s4 i) { classinfo *c = class_new(utf_new_char(classname)); - if (!c->linked) - panic("exception class not linked"); + if (!c->linked) { + printf("Exception class %s not linked! You probably have not set your CLASSPATH properly.\n", classname); + exit(1); + } return native_new_and_init_int(c, i); } @@ -334,8 +380,6 @@ void native_loadclasses() static int classesLoaded=0; /*temporary hack JoWenn*/ if (classesLoaded) return; classesLoaded = 1; -/* log_text("loadclasses entered");*/ - /*class_java_lang_System =*/ (void) class_new(utf_new_char("java/lang/VMClass"));/*JoWenn*/ @@ -345,56 +389,13 @@ void native_loadclasses() if (!class_java_lang_Cloneable) class_java_lang_Cloneable = class_new(utf_new_char("java/lang/Cloneable")); -/* log_text("loadclasses: class_java_lang_Cloneable has been initialized");*/ - class_java_lang_CloneNotSupportedException = - class_new(utf_new_char("java/lang/CloneNotSupportedException")); + if (!class_java_lang_Class) class_java_lang_Class = class_new(utf_new_char("java/lang/Class")); - class_java_io_IOException = - class_new(utf_new_char("java/io/IOException")); - class_java_io_FileNotFoundException = - class_new(utf_new_char("java/io/FileNotFoundException")); - class_java_lang_NoClassDefFoundError = - class_new(utf_new_char("java/lang/NoClassDefFoundError")); - class_java_lang_ClassNotFoundException = - class_new(utf_new_char("java/lang/ClassNotFoundException")); - class_java_lang_LinkageError = - class_new(utf_new_char("java/lang/LinkageError")); - class_java_lang_InstantiationException = - class_new(utf_new_char("java/lang/InstantiationException")); - class_java_lang_NoSuchMethodError = - class_new(utf_new_char("java/lang/NoSuchMethodError")); - class_java_lang_NoSuchFieldError = - class_new(utf_new_char("java/lang/NoSuchFieldError")); - class_java_lang_ClassFormatError = - class_new(utf_new_char("java/lang/ClassFormatError")); - class_java_io_SyncFailedException = - class_new(utf_new_char("java/io/SyncFailedException")); - -/* log_text("native_loadclasses: class_new(\"java/lang/ClassLoader\")"); */ + class_java_lang_ClassLoader = class_new(utf_new_char("java/lang/ClassLoader")); - class_gnu_java_lang_SystemClassLoader = - class_new(utf_new_char("gnu/java/lang/SystemClassLoader")); - -/* log_text("native_loadclasses: class_new(\"java/security/PrivilegedActionException\")"); */ - class_java_security_PrivilegedActionException = - class_new(utf_new_char("java/security/PrivilegedActionException")); - - loader_load_sysclass(&class_java_net_UnknownHostException, - utf_new_char("java/net/UnknownHostException")); - loader_load_sysclass(&class_java_net_SocketException, - utf_new_char("java/net/SocketException")); - - class_java_lang_IllegalArgumentException = - class_new(utf_new_char("java/lang/IllegalArgumentException")); - class_java_lang_ArrayIndexOutOfBoundsException = - class_new(utf_new_char("java/lang/ArrayIndexOutOfBoundsException")); - class_java_lang_NoSuchFieldException = - class_new(utf_new_char("java/lang/NoSuchFieldException")); - class_java_lang_NoSuchMethodException = - class_new(utf_new_char("java/lang/NoSuchMethodException")); /* load classes for wrapping primitive types */ class_java_lang_Double = class_new(utf_new_char("java/lang/Double")); @@ -457,11 +458,12 @@ void systemclassloader_addlibrary(java_objectheader *o) void init_systemclassloader() { + log_text("init_systemclassloader"); if (!SystemClassLoader) { native_loadclasses(); log_text("Initializing new system class loader"); /* create object and call initializer */ - SystemClassLoader = (java_lang_ClassLoader *) native_new_and_init(class_gnu_java_lang_SystemClassLoader);/*class_java_lang_ClassLoader);*/ + SystemClassLoader = (java_lang_ClassLoader *) native_new_and_init(class_new(utf_new_char("gnu/java/lang/SystemClassLoader"))); /* systemclassloader has no parent */ SystemClassLoader->parent = NULL; @@ -749,6 +751,7 @@ char *javastring_tochar(java_objectheader *so) fieldinfo *class_findfield_approx(classinfo *c, utf *name) { s4 i; + for (i = 0; i < c->fieldscount; i++) { /* compare field names */ if ((c->fields[i].name == name)) @@ -756,22 +759,25 @@ fieldinfo *class_findfield_approx(classinfo *c, utf *name) } /* field was not found, raise exception */ - *exceptionptr = native_new_and_init(class_java_lang_NoSuchFieldException); + *exceptionptr = new_exception(string_java_lang_NoSuchFieldException); return NULL; } -s4 class_findfield_index_approx (classinfo *c, utf *name) + +s4 class_findfield_index_approx(classinfo *c, utf *name) { s4 i; + for (i = 0; i < c->fieldscount; i++) { /* compare field names */ if ((c->fields[i].name == name)) return i; - } + } /* field was not found, raise exception */ - *exceptionptr = native_new_and_init(class_java_lang_NoSuchFieldException); + *exceptionptr = new_exception(string_java_lang_NoSuchFieldException); + return -1; } @@ -890,7 +896,7 @@ java_objectheader *native_new_and_init_int(classinfo *c, s4 i) /* call initializer */ - asm_calljavafunction(m, o, i, NULL, NULL); + asm_calljavafunction(m, o, (void *) i, NULL, NULL); return o; } -- 2.25.1