-/******************************************************************************/
-
-/* init_system_exceptions *****************************************************
-
- load, link and compile exceptions used in the system
-
-*******************************************************************************/
-
-void init_system_exceptions()
-{
- classinfo *c;
-
- /* java/lang/Throwable */
-
- class_java_lang_Throwable =
- class_new(utf_new_char(string_java_lang_Throwable));
- class_load(class_java_lang_Throwable);
- class_link(class_java_lang_Throwable);
- compile_all_class_methods(class_java_lang_Throwable);
-
- /* java/lang/VMThrowable */
-
- c = class_new(utf_new_char(string_java_lang_VMThrowable));
- class_load(c);
- class_link(c);
- compile_all_class_methods(c);
-
- /* java/lang/ClassFormatError */
-
- c = class_new(utf_new_char(string_java_lang_ClassFormatError));
- class_load(c);
- class_link(c);
- compile_all_class_methods(c);
-
- /* java/lang/Error */
-
- c = class_new(utf_new_char(string_java_lang_Error));
- class_load(c);
- class_link(c);
- compile_all_class_methods(c);
-
- /* java/lang/Exception */
-
- c = class_new(utf_new_char(string_java_lang_Exception));
- class_load(c);
- class_link(c);
- compile_all_class_methods(c);
-
- /* java/lang/IncompatibleClassChangeError */
-
- c = class_new(utf_new_char(string_java_lang_IncompatibleClassChangeError));
- class_load(c);
- class_link(c);
- compile_all_class_methods(c);
-
- /* java/lang/LinkageError */
-
- c = class_new(utf_new_char(string_java_lang_LinkageError));
- class_load(c);
- class_link(c);
- compile_all_class_methods(c);
-
- /* java/lang/NoClassDefFoundError */
-
- c = class_new(utf_new_char(string_java_lang_NoClassDefFoundError));
- class_load(c);
- class_link(c);
- compile_all_class_methods(c);
-
- /* java/lang/NoSuchFieldError */
-
- c = class_new(utf_new_char(string_java_lang_NoSuchFieldError));
- class_load(c);
- class_link(c);
- compile_all_class_methods(c);
-
- /* java/lang/NoSuchMethodError */
-
- c = class_new(utf_new_char(string_java_lang_NoSuchMethodError));
- class_load(c);
- class_link(c);
- compile_all_class_methods(c);
-
- /* java/lang/OutOfMemoryError */
-
- c = class_new(utf_new_char(string_java_lang_OutOfMemoryError));
- class_load(c);
- class_link(c);
- compile_all_class_methods(c);
-
- /* java/lang/VerifyError */
-
- c = class_new(utf_new_char(string_java_lang_VerifyError));
- class_load(c);
- class_link(c);
- compile_all_class_methods(c);
-
- /* java/lang/VirtualMachineError */
-
- c = class_new(utf_new_char(string_java_lang_VirtualMachineError));
- class_load(c);
- class_link(c);
- compile_all_class_methods(c);
-}
-
-
-void compile_all_class_methods(classinfo *c)
-{
- s4 i;
-
- for (i = 0; i < c->methodscount; i++) {
- (void) jit_compile(&(c->methods[i]));
- }
-}
-
-
-void throw_exception_exit()
-{
- java_objectheader *xptr;
- classinfo *c;
- methodinfo *pss;
-
- if (*exceptionptr) {
- xptr = *exceptionptr;
-
- /* clear exception, because we are calling jit code again */
- *exceptionptr = NULL;
-
- fprintf(stderr, "Exception in thread \"main\" ");
- fflush(stderr);
-
- c = xptr->vftbl->class;
-
-/* ts = class_resolveclassmethod(c, */
-/* utf_new_char("toString"), */
-/* utf_new_char("()Ljava/lang/String;"), */
-/* class_java_lang_Object, */
-/* false); */
-
-/* if (!ts) { */
-/* panic("internal error"); */
-/* } */
-
-/* tostring = asm_calljavafunction(ts, xptr, NULL, NULL, NULL); */
-
-/* utf_display(javastring_toutf(tostring, false)); */
-
- pss = class_resolveclassmethod(c,
- utf_new_char("printStackTrace"),
- utf_new_char("()V"),
- class_java_lang_Object,
- false);
-
- /* print the stacktrace */
- if (pss) {
- asm_calljavafunction(pss, xptr, NULL, NULL, NULL);
-
- /* this normally means, we are EXTREMLY out of memory, but may be
- any other exception */
- if (*exceptionptr) {
- utf_fprint_classname(stderr, c->name);
- fprintf(stderr, "\n");
- }
-
- } else {
- utf_fprint_classname(stderr, c->name);
- fprintf(stderr, ": printStackTrace()V not found!\n");
- }
-
- fflush(stderr);
-
- /* good bye! */
- exit(1);
- }
-}
-
-
-void throw_cacao_exception_exit(char *exception, char *message)
-{
- s4 i;
- char *tmp;
- s4 len;
-
- len = strlen(exception);
- tmp = MNEW(char, len);
- strncpy(tmp, exception, len);
-
- /* convert to classname */
-
- for (i = len - 1; i >= 0; i--) {
- if (tmp[i] == '/') tmp[i] = '.';
- }
-
- fprintf(stderr, "Exception in thread \"main\" %s", tmp);
-
- MFREE(tmp, char, len);
-
- if (strlen(message) > 0)
- fprintf(stderr, ": %s", message);