* Removed all Id tags.
[cacao.git] / src / vm / initialize.c
index 24e98905da297332fd68a93e06abe16389955bb1..cc847933a6c921c2124d993f1508da4bc74dce61 100644 (file)
@@ -1,6 +1,6 @@
 /* src/vm/initialize.c - static class initializer functions
 
-   Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
+   Copyright (C) 1996-2005, 2006, 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
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   Contact: cacao@cacaojvm.org
-
-   Authors: Reinhard Grafl
-
-   Changes: Mark Probst
-            Andreas Krall
-            Christian Thalinger
-
-   $Id: initialize.c 4357 2006-01-22 23:33:38Z twisti $
-
 */
 
 
 
 #include "vm/types.h"
 
+#include "threads/lock-common.h"
+
 #include "vm/global.h"
 #include "vm/initialize.h"
 #include "vm/builtin.h"
-#include "vm/class.h"
-#include "vm/loader.h"
 #include "vm/exceptions.h"
-#include "vm/options.h"
-#include "vm/statistics.h"
 #include "vm/stringlocal.h"
+#include "vm/vm.h"
+
 #include "vm/jit/asmpart.h"
 
+#include "vmcore/class.h"
+#include "vmcore/loader.h"
+#include "vmcore/options.h"
+
+#if defined(ENABLE_STATISTICS)
+# include "vmcore/statistics.h"
+#endif
+
 
 /* private functions **********************************************************/
 
@@ -73,19 +71,13 @@ bool initialize_class(classinfo *c)
        if (!makeinitializations)
                return true;
 
-#if defined(USE_THREADS)
-       /* enter a monitor on the class */
-
-       builtin_monitorenter((java_objectheader *) c);
-#endif
+       LOCK_MONITOR_ENTER(c);
 
        /* maybe the class is already initalized or the current thread, which can
           pass the monitor, is currently initalizing this class */
 
        if (CLASS_IS_OR_ALMOST_INITIALIZED(c)) {
-#if defined(USE_THREADS)
-               builtin_monitorexit((java_objectheader *) c);
-#endif
+               LOCK_MONITOR_EXIT(c);
 
                return true;
        }
@@ -94,11 +86,9 @@ bool initialize_class(classinfo *c)
        error and we have to throw a NoClassDefFoundError */
 
        if (c->state & CLASS_ERROR) {
-               *exceptionptr = new_noclassdeffounderror(c->name);
+               exceptions_throw_noclassdeffounderror(c->name);
 
-#if defined(USE_THREADS)
-               builtin_monitorexit((java_objectheader *) c);
-#endif
+               LOCK_MONITOR_EXIT(c);
 
                /* ...but return true, this is ok (mauve test) */
 
@@ -123,11 +113,7 @@ bool initialize_class(classinfo *c)
 
        c->state &= ~CLASS_INITIALIZING;
 
-#if defined(USE_THREADS)
-       /* leave the monitor */
-
-       builtin_monitorexit((java_objectheader *) c);
-#endif
+       LOCK_MONITOR_EXIT(c);
 
        return r;
 }
@@ -142,11 +128,8 @@ bool initialize_class(classinfo *c)
 
 static bool initialize_class_intern(classinfo *c)
 {
-       methodinfo        *m;
-       java_objectheader *xptr;
-#if defined(USE_THREADS) && !defined(NATIVE_THREADS)
-       int b;
-#endif
+       methodinfo    *m;
+       java_handle_t *xptr;
 
        /* maybe the class is not already linked */
 
@@ -198,25 +181,15 @@ static bool initialize_class_intern(classinfo *c)
                log_message_class("Starting static class initializer for class: ", c);
 #endif
 
-#if defined(USE_THREADS) && !defined(NATIVE_THREADS)
-       b = blockInts;
-       blockInts = 0;
-#endif
-
        /* now call the initializer */
 
-       ASM_CALLJAVAFUNCTION(m, NULL, NULL, NULL, NULL);
-
-#if defined(USE_THREADS) && !defined(NATIVE_THREADS)
-       assert(blockInts == 0);
-       blockInts = b;
-#endif
+       (void) vm_call_method(m, NULL);
 
        /* we have an exception or error */
 
-       xptr = *exceptionptr;
+       xptr = exceptions_get_exception();
 
-       if (xptr) {
+       if (xptr != NULL) {
                /* class is NOT initialized and is marked with error */
 
                c->state |= CLASS_ERROR;
@@ -226,13 +199,11 @@ static bool initialize_class_intern(classinfo *c)
                if (builtin_instanceof(xptr, class_java_lang_Exception)) {
                        /* clear exception, because we are calling jit code again */
 
-                       *exceptionptr = NULL;
+                       exceptions_clear_exception();
 
                        /* wrap the exception */
 
-                       *exceptionptr =
-                               new_exception_throwable(string_java_lang_ExceptionInInitializerError,
-                                                                               (java_lang_Throwable *) xptr);
+                       exceptions_throw_exceptionininitializererror(xptr);
                }
 
                return false;