Merge -> trunk
[cacao.git] / src / cacaoh / dummy.c
index 91d369542ec41d0928576c5e8832a6e66d0b7b13..900c74c936356988c5fd9ac1bda296ca05dfcc9e 100644 (file)
@@ -1,9 +1,7 @@
 /* src/cacaoh/dummy.c - dummy functions for cacaoh
 
-   Copyright (C) 2007 R. Grafl, A. Krall, C. Kruegel,
-   C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
-   E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
-   J. Wenninger, Institut f. Computersprachen - TU Wien
+   Copyright (C) 2007, 2008
+   CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
 
    This file is part of CACAO.
 
@@ -28,6 +26,7 @@
 #include "config.h"
 
 #include <assert.h>
+#include <errno.h>
 #include <stdarg.h>
 #include <stdint.h>
 #include <stdio.h>
 
 #include "toolbox/logging.h"
 
+#include "vm/exceptions.h"
 #include "vm/global.h"
 #include "vm/primitive.h"
 #include "vm/vm.h"
 
 #include "vmcore/class.h"
-#include "vmcore/method.h"
-#include "vmcore/utf8.h"
 #include "vmcore/classcache.h"
 #include "vmcore/loader.h"
+#include "vmcore/method.h"
+#include "vmcore/utf8.h"
+#include "vmcore/system.h"
 
 
 /* global variables ***********************************************************/
@@ -99,7 +100,7 @@ java_handle_t *array_objectarray_element_get(java_handle_objectarray_t *a, int32
                return NULL;
        }
 
-       LLNI_objectarray_element_get(a, index, value);
+       value = LLNI_WRAP(LLNI_array_direct(a, index));
 
        return value;
 }
@@ -120,7 +121,7 @@ void array_objectarray_element_set(java_handle_objectarray_t *a, int32_t index,
                return;
        }
 
-       LLNI_objectarray_element_set(a, index, value);
+       LLNI_array_direct(a, index) = LLNI_UNWRAP(value);
 }
 
 int32_t array_length_get(java_handle_t *a)
@@ -296,7 +297,7 @@ void exceptions_throw_classformaterror(classinfo *c, const char *message, ...)
        abort();
 }
 
-void exceptions_throw_incompatibleclasschangeerror(classinfo *c)
+void exceptions_throw_incompatibleclasschangeerror(classinfo *c, const char *message)
 {
        fprintf(stderr, "java.lang.IncompatibleClassChangeError: ");
 
@@ -353,7 +354,7 @@ void exceptions_throw_noclassdeffounderror_wrong_name(classinfo *c, utf *name)
        abort();
 }
 
-void exceptions_throw_verifyerror(methodinfo *m, const char *message)
+void exceptions_throw_verifyerror(methodinfo *m, const char *message, ...)
 {
        fprintf(stderr, "java.lang.VerifyError: ");
        utf_fprint_printable_ascii(stderr, m->name);
@@ -385,21 +386,11 @@ void exceptions_throw_nosuchmethoderror(classinfo *c, utf *name, utf *desc)
        abort();
 }
 
-void exceptions_throw_unsupportedclassversionerror(classinfo *c,
-                                                                                                  const char *message, ...)
+void exceptions_throw_unsupportedclassversionerror(classinfo *c, u4 ma, u4 mi)
 {
-       va_list ap;
-
        fprintf(stderr, "java.lang.UnsupportedClassVersionError: " );
-
        utf_display_printable_ascii(c->name);
-       fprintf(stderr, ": ");
-
-       va_start(ap, message);
-       vfprintf(stderr, message, ap);
-       va_end(ap);
-
-       fputc('\n', stderr);
+       fprintf(stderr, " (Unsupported major.minor version %d.%d)\n", ma, mi);
 
        abort();
 }
@@ -516,12 +507,12 @@ void lock_init_object_lock(java_object_t *o)
 {
 }
 
-bool lock_monitor_enter(java_object_t *o)
+bool lock_monitor_enter(java_handle_t *o)
 {
        return true;
 }
 
-bool lock_monitor_exit(java_object_t *o)
+bool lock_monitor_exit(java_handle_t *o)
 {
        return true;
 }
@@ -557,18 +548,18 @@ void mem_free(void *m, int32_t size)
        free(m);
 }
 
-void *dump_alloc(int32_t size)
+void *dumpmemory_get(size_t size)
 {
        return malloc(size);
 }
 
-void dump_release(int32_t size)
+int32_t dumpmemory_marker(void)
 {
+       return 0;
 }
 
-int32_t dump_size(void)
+void dumpmemory_release(int32_t size)
 {
-       return 0;
 }
 
 
@@ -746,15 +737,36 @@ void vm_abort(const char *text, ...)
 {
        va_list ap;
 
-       /* print the log message */
-
        va_start(ap, text);
        vfprintf(stderr, text, ap);
        va_end(ap);
 
-       /* now abort the VM */
+       system_abort();
+}
 
-       abort();
+void vm_abort_errno(const char *text, ...)
+{
+       va_list ap;
+
+       va_start(ap, text);
+       vm_abort_errnum(errno, text, ap);
+       va_end(ap);
+}
+
+void vm_abort_errnum(int errnum, const char *text, ...)
+{
+       va_list ap;
+
+       log_start();
+
+       va_start(ap, text);
+       log_vprint(text, ap);
+       va_end(ap);
+
+       log_print(": %s", system_strerror(errnum));
+       log_finish();
+
+       system_abort();
 }
 
 java_handle_t *vm_call_method(methodinfo *m, java_handle_t *o, ...)
@@ -783,6 +795,21 @@ void print_dynamic_super_statistics(void)
 }
 
 
+#if defined(ENABLE_VMLOG)
+void vmlog_cacao_set_prefix(const char *arg)
+{
+}
+
+void vmlog_cacao_set_stringprefix(const char *arg)
+{
+}
+
+void vmlog_cacao_set_ignoreprefix(const char *arg)
+{
+}
+#endif
+
+
 /*
  * These are local overrides for various environment variables in Emacs.
  * Please do not remove this and leave it at the end of the file, where