Merged branch subtype-trunk into default.
[cacao.git] / src / native / vm / cldc1.1 / java_lang_Thread.cpp
index 4c64b18d4df0c1750017a1ca743e6a586f570cf0..0f68bd5e01aa29b728649eed702c0153d7b691ef 100644 (file)
 
 #include <stdint.h>
 
-#include "native/jni.h"
-#include "native/native.h"
+#include "native/jni.hpp"
+#include "native/native.hpp"
 
-// FIXME
-extern "C" {
-#include "native/include/java_lang_Thread.h"
-}
+#if defined(ENABLE_JNI_HEADERS)
+# include "native/include/java_lang_Thread.h"
+#endif
 
 #include "threads/thread.hpp"
+#include "threads/threadlist.hpp"
 
-#include "toolbox/logging.h"
+#include "toolbox/logging.hpp"
 
-#include "vm/builtin.h"
-
-
-/* native methods implemented by this file ************************************/
-static JNINativeMethod methods[] = {
-       { (char*) "currentThread", (char*) "()Ljava/lang/Thread;", (void*) (uintptr_t) &Java_java_lang_Thread_currentThread },
-       { (char*) "setPriority0",  (char*) "(II)V",                (void*) (uintptr_t) &Java_java_lang_Thread_setPriority0  },
-       { (char*) "sleep",         (char*) "(J)V",                 (void*) (uintptr_t) &Java_java_lang_Thread_sleep         },
-       { (char*) "start0",        (char*) "()V",                  (void*) (uintptr_t) &Java_java_lang_Thread_start0        },
-       { (char*) "isAlive",       (char*) "()Z",                  (void*) (uintptr_t) &Java_java_lang_Thread_isAlive       },
-#if 0
-       { (char*) "activeCount",   (char*) "()I",                  (void*) (uintptr_t) &Java_java_lang_Thread_activeCount   },
-       { (char*) "setPriority0",  (char*) "(II)V",                (void*) (uintptr_t) &Java_java_lang_Thread_setPriority0  },
-       { (char*) "interrupt0",    (char*) "()V",                  (void*) (uintptr_t) &Java_java_lang_Thread_interrupt0    },
-       { (char*) "internalExit",  (char*) "()V",                  (void*) (uintptr_t) &Java_java_lang_Thread_internalExit  },
-#endif
-       { (char*) "yield",         (char*) "()V",                  (void*) (uintptr_t) &Java_java_lang_Thread_yield         },
-};
-
-
-/* _Jv_java_lang_Thread_init ***************************************************
-   Register native functions.
-*******************************************************************************/
-// FIXME
-extern "C" {
-void _Jv_java_lang_Thread_init(void)
-{
-       utf *u;
-       u = utf_new_char("java/lang/Thread");
-       native_method_register(u, methods, NATIVE_METHODS_COUNT);
-}
-}
+#include "vm/jit/builtin.hpp"
+#include "vm/javaobjects.hpp"
 
 
 // Native functions are exported as C functions.
@@ -87,13 +51,9 @@ extern "C" {
  * Method:    currentThread
  * Signature: ()Ljava/lang/Thread;
  */
-JNIEXPORT java_lang_Thread* JNICALL Java_java_lang_Thread_currentThread(JNIEnv *env, jclass clazz)
+JNIEXPORT jobject JNICALL Java_java_lang_Thread_currentThread(JNIEnv *env, jclass clazz)
 {
-       java_lang_Thread *to;
-
-       to = (java_lang_Thread *) thread_get_current_object();
-
-       return to;
+       return (jobject) thread_get_current_object();
 }
 
 
@@ -102,16 +62,14 @@ JNIEXPORT java_lang_Thread* JNICALL Java_java_lang_Thread_currentThread(JNIEnv *
  * Method:    setPriority0
  * Signature: (II)V
  */
-JNIEXPORT void JNICALL Java_java_lang_Thread_setPriority0(JNIEnv *env, java_lang_Thread *_this, s4 oldPriority, s4 newPriority)
+JNIEXPORT void JNICALL Java_java_lang_Thread_setPriority0(JNIEnv *env, jobject _this, jint oldPriority, jint newPriority)
 {
 #if defined(ENABLE_THREADS)
-       threadobject *t;
-
-       t = (threadobject *) _this->vm_thread;
-
-       /* The threadobject is null when a thread is created in Java. The
-          priority is set later during startup. */
+       java_lang_Thread jlt(_this);
+       threadobject* t = jlt.get_vm_thread();
 
+       // The threadobject is null when a thread is created in Java. The
+       // priority is set later during startup.
        if (t == NULL)
                return;
 
@@ -125,7 +83,7 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_setPriority0(JNIEnv *env, java_lang
  * Method:    sleep
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_java_lang_Thread_sleep(JNIEnv *env, jclass clazz, s8 millis)
+JNIEXPORT void JNICALL Java_java_lang_Thread_sleep(JNIEnv *env, jclass clazz, jlong millis)
 {
 #if defined(ENABLE_THREADS)
        threads_sleep(millis, 0);
@@ -138,10 +96,11 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_sleep(JNIEnv *env, jclass clazz, s8
  * Method:    start0
  * Signature: ()V
  */
-JNIEXPORT void JNICALL Java_java_lang_Thread_start0(JNIEnv *env, java_lang_Thread *_this)
+JNIEXPORT void JNICALL Java_java_lang_Thread_start0(JNIEnv *env, jobject _this)
 {
 #if defined(ENABLE_THREADS)
-       threads_thread_start((java_handle_t *) _this);
+       java_lang_Thread jlt(_this);
+       threads_thread_start(jlt.get_handle());
 #endif
 }
 
@@ -151,29 +110,25 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_start0(JNIEnv *env, java_lang_Threa
  * Method:    isAlive
  * Signature: ()Z
  */
-JNIEXPORT int32_t JNICALL Java_java_lang_Thread_isAlive(JNIEnv *env, java_lang_Thread *_this)
+JNIEXPORT jboolean JNICALL Java_java_lang_Thread_isAlive(JNIEnv *env, jobject _this)
 {
 #if defined(ENABLE_THREADS)
-       threadobject *t;
-       bool          result;
-
-       t = (threadobject *) _this->vm_thread;
+       java_lang_Thread jlt(_this);
+       threadobject* t = jlt.get_vm_thread();
 
        if (t == NULL)
                return 0;
 
-       result = threads_thread_is_alive(t);
+       bool result = threads_thread_is_alive(t);
 
        return result;
 #else
-       /* If threads are disabled, the only thread running is alive. */
-
+       // If threads are disabled, the only thread running is alive.
        return 1;
 #endif
 }
 
 
-#if 0
 /*
  * Class:     java/lang/Thread
  * Method:    activeCount
@@ -181,16 +136,11 @@ JNIEXPORT int32_t JNICALL Java_java_lang_Thread_isAlive(JNIEnv *env, java_lang_T
  */
 JNIEXPORT s4 JNICALL Java_java_lang_Thread_activeCount(JNIEnv *env, jclass clazz)
 {
-}
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    setPriority0
- * Signature: (II)V
- */
-JNIEXPORT void JNICALL Java_java_lang_Thread_setPriority0(JNIEnv *env, struct java_lang_Thread* _this, s4 par1, s4 par2)
-{
+#if defined(ENABLE_THREADS)
+       return ThreadList::get_number_of_non_daemon_threads();
+#else
+       return 1;
+#endif
 }
 
 
@@ -199,17 +149,22 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_setPriority0(JNIEnv *env, struct ja
  * Method:    interrupt0
  * Signature: ()V
  */
-JNIEXPORT void JNICALL Java_java_lang_Thread_interrupt0(JNIEnv *env, struct java_lang_Thread* _this)
+JNIEXPORT void JNICALL Java_java_lang_Thread_interrupt0(JNIEnv *env, jobject _this)
 {
+#if defined(ENABLE_THREADS)
+       java_lang_Thread jlt(_this);
+        threadobject* t = jlt.get_vm_thread();
+        threads_thread_interrupt(t);
+#endif
 }
 
-
+#if 0
 /*
  * Class:     java/lang/Thread
  * Method:    internalExit
  * Signature: ()V
  */
-JNIEXPORT void JNICALL Java_java_lang_Thread_internalExit(JNIEnv *env, struct java_lang_Thread* _this)
+JNIEXPORT void JNICALL Java_java_lang_Thread_internalExit(JNIEnv *env, jobject _this)
 {
 }
 #endif
@@ -230,6 +185,39 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_yield(JNIEnv *env, jclass clazz)
 } // extern "C"
 
 
+/* native methods implemented by this file ************************************/
+static JNINativeMethod methods[] = {
+       { (char*) "currentThread", (char*) "()Ljava/lang/Thread;", (void*) (uintptr_t) &Java_java_lang_Thread_currentThread },
+       { (char*) "setPriority0",  (char*) "(II)V",                (void*) (uintptr_t) &Java_java_lang_Thread_setPriority0  },
+       { (char*) "sleep",         (char*) "(J)V",                 (void*) (uintptr_t) &Java_java_lang_Thread_sleep         },
+       { (char*) "start0",        (char*) "()V",                  (void*) (uintptr_t) &Java_java_lang_Thread_start0        },
+       { (char*) "isAlive",       (char*) "()Z",                  (void*) (uintptr_t) &Java_java_lang_Thread_isAlive       },
+       { (char*) "activeCount",   (char*) "()I",                  (void*) (uintptr_t) &Java_java_lang_Thread_activeCount   },
+       { (char*) "setPriority0",  (char*) "(II)V",                (void*) (uintptr_t) &Java_java_lang_Thread_setPriority0  },
+       { (char*) "interrupt0",    (char*) "()V",                  (void*) (uintptr_t) &Java_java_lang_Thread_interrupt0    },
+#if 0
+       { (char*) "internalExit",  (char*) "()V",                  (void*) (uintptr_t) &Java_java_lang_Thread_internalExit  },
+#endif
+       { (char*) "yield",         (char*) "()V",                  (void*) (uintptr_t) &Java_java_lang_Thread_yield         },
+};
+
+
+/* _Jv_java_lang_Thread_init ***************************************************
+   Register native functions.
+*******************************************************************************/
+void _Jv_java_lang_Thread_init(void)
+{
+       utf* u = utf_new_char("java/lang/Thread");
+       NativeMethods& nm = VM::get_current()->get_nativemethods();
+       nm.register_methods(u, methods, NATIVE_METHODS_COUNT);
+}
+
+
 /*
  * 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