From 4755cd21a50b04273e05a96a9ce7b73c6c0cfadc Mon Sep 17 00:00:00 2001 From: "chris.double" Date: Thu, 21 Sep 2006 23:25:56 +0000 Subject: [PATCH] jni library for factor --- contrib/jni/jni.factor | 66 +++++++++++++++++++++++++++++++++++++++++ contrib/jni/load.factor | 5 ++++ 2 files changed, 71 insertions(+) create mode 100644 contrib/jni/jni.factor create mode 100644 contrib/jni/load.factor diff --git a/contrib/jni/jni.factor b/contrib/jni/jni.factor new file mode 100644 index 0000000000..449b0cc192 --- /dev/null +++ b/contrib/jni/jni.factor @@ -0,0 +1,66 @@ +! Copyright (C) 2006 Chris Double. +! See http://factorcode.org/license.txt for BSD license. +IN: jni +USING: kernel alien ; + +LIBRARY: jvm + +TYPEDEF: int jint +TYPEDEF: uchar jboolean +TYPEDEF: void* JNIEnv + +BEGIN-STRUCT: jdk-init-args + FIELD: jint version + FIELD: void* properties + FIELD: jint check-source + FIELD: jint native-stack-size + FIELD: jint java-stack-size + FIELD: jint min-heap-size + FIELD: jint max-heap-size + FIELD: jint verify-mode + FIELD: char* classpath + FIELD: void* vprintf + FIELD: void* exit + FIELD: void* abort + FIELD: jint enable-class-gc + FIELD: jint enable-verbose-gc + FIELD: jint disable-async-gc + FIELD: jint verbose + FIELD: jboolean debugging + FIELD: jint debug-port +END-STRUCT + +BEGIN-STRUCT: JNIInvokeInterface + FIELD: void* reserved0 + FIELD: void* reserved1 + FIELD: void* reserved2 + FIELD: void* DestroyJavaVM + FIELD: void* AttachCurrentThread + FIELD: void* DetachCurrentThread + FIELD: void* GetEnv + FIELD: void* AttachCurrentThreadAsDaemon +END-STRUCT + +BEGIN-STRUCT: JavaVM + FIELD: JNIInvokeInterface* functions +END-STRUCT + +FUNCTION: jint JNI_GetDefaultJavaVMInitArgs ( jdk-init-args* args ) ; +FUNCTION: jint JNI_CreateJavaVM ( void** pvm, void** penv, void* args ) ; + +: ( -- jdk-init-args ) + "jdk-init-args" HEX: 00010004 over set-jdk-init-args-version ; + +: jni1 ( -- init-args int ) + dup JNI_GetDefaultJavaVMInitArgs ; + +: jni2 ( -- vm env int ) + f f [ + jni1 drop JNI_CreateJavaVM + ] 2keep rot ; + +: (destroy-java-vm) + "int" { "void*" } "cdecl" alien-indirect ; + +: destroy-java-vm ( javavm -- int ) + 0 swap void*-nth dup JavaVM-functions JNIInvokeInterface-DestroyJavaVM (destroy-java-vm) ; diff --git a/contrib/jni/load.factor b/contrib/jni/load.factor new file mode 100644 index 0000000000..4d47789045 --- /dev/null +++ b/contrib/jni/load.factor @@ -0,0 +1,5 @@ +! Copyright (C) 2006 Chris Double. +! See http://factorcode.org/license.txt for BSD license. +PROVIDE: contrib/jni { + "jni.factor" +} { } ;