1 ! Copyright (C) 2006 Chris Double.
2 ! See http://factorcode.org/license.txt for BSD license.
4 USING: kernel alien arrays sequences ;
9 TYPEDEF: uchar jboolean
12 BEGIN-STRUCT: jdk-init-args
14 FIELD: void* properties
15 FIELD: jint check-source
16 FIELD: jint native-stack-size
17 FIELD: jint java-stack-size
18 FIELD: jint min-heap-size
19 FIELD: jint max-heap-size
20 FIELD: jint verify-mode
21 FIELD: char* classpath
25 FIELD: jint enable-class-gc
26 FIELD: jint enable-verbose-gc
27 FIELD: jint disable-async-gc
29 FIELD: jboolean debugging
30 FIELD: jint debug-port
33 BEGIN-STRUCT: JNIInvokeInterface
34 FIELD: void* reserved0
35 FIELD: void* reserved1
36 FIELD: void* reserved2
37 FIELD: void* DestroyJavaVM
38 FIELD: void* AttachCurrentThread
39 FIELD: void* DetachCurrentThread
41 FIELD: void* AttachCurrentThreadAsDaemon
45 FIELD: JNIInvokeInterface* functions
48 BEGIN-STRUCT: JNINativeInterface
49 FIELD: void* reserved0
50 FIELD: void* reserved1
51 FIELD: void* reserved2
52 FIELD: void* reserved3
53 FIELD: void* GetVersion
54 FIELD: void* DefineClass
55 FIELD: void* FindClass
56 FIELD: void* FromReflectedMethod
57 FIELD: void* FromReflectedField
58 FIELD: void* ToReflectedMethod
59 FIELD: void* GetSuperclass
60 FIELD: void* IsAssignableFrom
61 FIELD: void* ToReflectedField
64 FIELD: void* ExceptionOccurred
65 FIELD: void* ExceptionDescribe
66 FIELD: void* ExceptionClear
67 FIELD: void* FatalError
68 FIELD: void* PushLocalFrame
69 FIELD: void* PopLocalFrame
70 FIELD: void* NewGlobalRef
71 FIELD: void* DeleteGlobalRef
72 FIELD: void* DeleteLocalRef
73 FIELD: void* IsSameObject
74 FIELD: void* NewLocalRef
75 FIELD: void* EnsureLocalCapacity
76 FIELD: void* AllocObject
77 FIELD: void* NewObject
78 FIELD: void* NewObjectV
79 FIELD: void* NewObjectA
80 FIELD: void* GetObjectClass
81 FIELD: void* IsInstanceOf
82 FIELD: void* GetMethodID
83 FIELD: void* CallObjectMethod
84 FIELD: void* CallObjectMethodV
85 FIELD: void* CallObjectMethodA
86 FIELD: void* CallBooleanMethod
87 FIELD: void* CallBooleanMethodV
88 FIELD: void* CallBooleanMethodA
89 FIELD: void* CallByteMethod
90 FIELD: void* CallByteMethodV
91 FIELD: void* CallByteMethodA
92 FIELD: void* CallCharMethod
93 FIELD: void* CallCharMethodV
94 FIELD: void* CallCharMethodA
95 FIELD: void* CallShortMethod
96 FIELD: void* CallShortMethodV
97 FIELD: void* CallShortMethodA
98 FIELD: void* CallIntMethod
99 FIELD: void* CallIntMethodV
100 FIELD: void* CallIntMethodA
101 FIELD: void* CallLongMethod
102 FIELD: void* CallLongMethodV
103 FIELD: void* CallLongMethodA
104 FIELD: void* CallFloatMethod
105 FIELD: void* CallFloatMethodV
106 FIELD: void* CallFloatMethodA
107 FIELD: void* CallDoubleMethod
108 FIELD: void* CallDoubleMethodV
109 FIELD: void* CallDoubleMethodA
110 FIELD: void* CallVoidMethod
111 FIELD: void* CallVoidMethodV
112 FIELD: void* CallVoidMethodA
113 FIELD: void* CallNonvirtualObjectMethod
114 FIELD: void* CallNonvirtualObjectMethodV
115 FIELD: void* CallNonvirtualObjectMethodA
116 FIELD: void* CallNonvirtualBooleanMethod
117 FIELD: void* CallNonvirtualBooleanMethodV
118 FIELD: void* CallNonvirtualBooleanMethodA
119 FIELD: void* CallNonvirtualByteMethod
120 FIELD: void* CallNonvirtualByteMethodV
121 FIELD: void* CallNonvirtualByteMethodA
122 FIELD: void* CallNonvirtualCharMethod
123 FIELD: void* CallNonvirtualCharMethodV
124 FIELD: void* CallNonvirtualCharMethodA
125 FIELD: void* CallNonvirtualShortMethod
126 FIELD: void* CallNonvirtualShortMethodV
127 FIELD: void* CallNonvirtualShortMethodA
128 FIELD: void* CallNonvirtualIntMethod
129 FIELD: void* CallNonvirtualIntMethodV
130 FIELD: void* CallNonvirtualIntMethodA
131 FIELD: void* CallNonvirtualLongMethod
132 FIELD: void* CallNonvirtualLongMethodV
133 FIELD: void* CallNonvirtualLongMethodA
134 FIELD: void* CallNonvirtualFloatMethod
135 FIELD: void* CallNonvirtualFloatMethodV
136 FIELD: void* CallNonvirtualFloatMethodA
137 FIELD: void* CallNonvirtualDoubleMethod
138 FIELD: void* CallNonvirtualDoubleMethodV
139 FIELD: void* CallNonvirtualDoubleMethodA
140 FIELD: void* CallNonvirtualVoidMethod
141 FIELD: void* CallNonvirtualVoidMethodV
142 FIELD: void* CallNonvirtualVoidMethodA
143 FIELD: void* GetFieldID
144 FIELD: void* GetObjectField
145 FIELD: void* GetBooleanField
146 FIELD: void* GetByteField
147 FIELD: void* GetCharField
148 FIELD: void* GetShortField
149 FIELD: void* GetIntField
150 FIELD: void* GetLongField
151 FIELD: void* GetFloatField
152 FIELD: void* GetDoubleField
153 FIELD: void* SetObjectField
154 FIELD: void* SetBooleanField
155 FIELD: void* SetByteField
156 FIELD: void* SetCharField
157 FIELD: void* SetShortField
158 FIELD: void* SetIntField
159 FIELD: void* SetLongField
160 FIELD: void* SetFloatField
161 FIELD: void* SetDoubleField
162 FIELD: void* GetStaticMethodID
163 FIELD: void* CallStaticObjectMethod
164 FIELD: void* CallStaticObjectMethodV
165 FIELD: void* CallStaticObjectMethodA
166 FIELD: void* CallStaticBooleanMethod
167 FIELD: void* CallStaticBooleanMethodV
168 FIELD: void* CallStaticBooleanMethodA
169 FIELD: void* CallStaticByteMethod
170 FIELD: void* CallStaticByteMethodV
171 FIELD: void* CallStaticByteMethodA
172 FIELD: void* CallStaticCharMethod
173 FIELD: void* CallStaticCharMethodV
174 FIELD: void* CallStaticCharMethodA
175 FIELD: void* CallStaticShortMethod
176 FIELD: void* CallStaticShortMethodV
177 FIELD: void* CallStaticShortMethodA
178 FIELD: void* CallStaticIntMethod
179 FIELD: void* CallStaticIntMethodV
180 FIELD: void* CallStaticIntMethodA
181 FIELD: void* CallStaticLongMethod
182 FIELD: void* CallStaticLongMethodV
183 FIELD: void* CallStaticLongMethodA
184 FIELD: void* CallStaticFloatMethod
185 FIELD: void* CallStaticFloatMethodV
186 FIELD: void* CallStaticFloatMethodA
187 FIELD: void* CallStaticDoubleMethod
188 FIELD: void* CallStaticDoubleMethodV
189 FIELD: void* CallStaticDoubleMethodA
190 FIELD: void* CallStaticVoidMethod
191 FIELD: void* CallStaticVoidMethodV
192 FIELD: void* CallStaticVoidMethodA
193 FIELD: void* GetStaticFieldID
194 FIELD: void* GetStaticObjectField
195 FIELD: void* GetStaticBooleanField
196 FIELD: void* GetStaticByteField
197 FIELD: void* GetStaticCharField
198 FIELD: void* GetStaticShortField
199 FIELD: void* GetStaticIntField
200 FIELD: void* GetStaticLongField
201 FIELD: void* GetStaticFloatField
202 FIELD: void* GetStaticDoubleField
203 FIELD: void* SetStaticObjectField
204 FIELD: void* SetStaticBooleanField
205 FIELD: void* SetStaticByteField
206 FIELD: void* SetStaticCharField
207 FIELD: void* SetStaticShortField
208 FIELD: void* SetStaticIntField
209 FIELD: void* SetStaticLongField
210 FIELD: void* SetStaticFloatField
211 FIELD: void* SetStaticDoubleField
212 FIELD: void* NewString
213 FIELD: void* GetStringLength
214 FIELD: void* GetStringChars
215 FIELD: void* ReleaseStringChars
216 FIELD: void* NewStringUTF
217 FIELD: void* GetStringUTFLength
218 FIELD: void* GetStringUTFChars
219 FIELD: void* ReleaseStringUTFChars
220 FIELD: void* GetArrayLength
221 FIELD: void* NewObjectArray
222 FIELD: void* GetObjectArrayElement
223 FIELD: void* SetObjectArrayElement
224 FIELD: void* NewBooleanArray
225 FIELD: void* NewByteArray
226 FIELD: void* NewCharArray
227 FIELD: void* NewShortArray
228 FIELD: void* NewIntArray
229 FIELD: void* NewLongArray
230 FIELD: void* NewFloatArray
231 FIELD: void* NewDoubleArray
232 FIELD: void* GetBooleanArrayElements
233 FIELD: void* GetByteArrayElements
234 FIELD: void* GetCharArrayElements
235 FIELD: void* GetShortArrayElements
236 FIELD: void* GetIntArrayElements
237 FIELD: void* GetLongArrayElements
238 FIELD: void* GetFloatArrayElements
239 FIELD: void* GetDoubleArrayElements
240 FIELD: void* ReleaseBooleanArrayElements
241 FIELD: void* ReleaseByteArrayElements
242 FIELD: void* ReleaseCharArrayElements
243 FIELD: void* ReleaseShortArrayElements
244 FIELD: void* ReleaseIntArrayElements
245 FIELD: void* ReleaseLongArrayElements
246 FIELD: void* ReleaseFloatArrayElements
247 FIELD: void* ReleaseDoubleArrayElements
248 FIELD: void* GetBooleanArrayRegion
249 FIELD: void* GetByteArrayRegion
250 FIELD: void* GetCharArrayRegion
251 FIELD: void* GetShortArrayRegion
252 FIELD: void* GetIntArrayRegion
253 FIELD: void* GetLongArrayRegion
254 FIELD: void* GetFloatArrayRegion
255 FIELD: void* GetDoubleArrayRegion
256 FIELD: void* SetBooleanArrayRegion
257 FIELD: void* SetByteArrayRegion
258 FIELD: void* SetCharArrayRegion
259 FIELD: void* SetShortArrayRegion
260 FIELD: void* SetIntArrayRegion
261 FIELD: void* SetLongArrayRegion
262 FIELD: void* SetFloatArrayRegion
263 FIELD: void* SetDoubleArrayRegion
264 FIELD: void* RegisterNatives
265 FIELD: void* UnregisterNatives
266 FIELD: void* MonitorEnter
267 FIELD: void* MonitorExit
268 FIELD: void* GetJavaVM
269 FIELD: void* GetStringRegion
270 FIELD: void* GetStringUTFRegion
271 FIELD: void* GetPrimitiveArrayCritical
272 FIELD: void* ReleasePrimitiveArrayCritical
273 FIELD: void* GetStringCritical
274 FIELD: void* ReleaseStringCritical
275 FIELD: void* NewWeakGlobalRef
276 FIELD: void* DeleteWeakGlobalRef
277 FIELD: void* ExceptionCheck
278 FIELD: void* NewDirectByteBuffer
279 FIELD: void* GetDirectBufferAddress
280 FIELD: void* GetDirectBufferCapacity
284 FIELD: JNINativeInterface* functions
287 FUNCTION: jint JNI_GetDefaultJavaVMInitArgs ( jdk-init-args* args ) ;
288 FUNCTION: jint JNI_CreateJavaVM ( void** pvm, void** penv, void* args ) ;
290 : <jdk-init-args> ( -- jdk-init-args )
291 "jdk-init-args" <c-object> HEX: 00010004 over set-jdk-init-args-version ;
293 : jni1 ( -- init-args int )
294 <jdk-init-args> dup JNI_GetDefaultJavaVMInitArgs ;
296 : jni2 ( -- vm env int )
297 f <void*> f <void*> [
298 jni1 drop JNI_CreateJavaVM
299 ] 2keep rot dup 0 = [
300 >r >r 0 swap void*-nth r> 0 swap void*-nth r>
304 "int" { "void*" } "cdecl" alien-indirect ;
306 : (attach-current-thread)
307 "int" { "void*" "void*" "void*" } "cdecl" alien-indirect ;
309 : (detach-current-thread)
310 "int" { "void*" } "cdecl" alien-indirect ;
313 "int" { "void*" "void*" "int" } "cdecl" alien-indirect ;
315 : (attach-current-thread-as-daemon)
316 "int" { "void*" "void*" "void*" } "cdecl" alien-indirect ;
318 : destroy-java-vm ( javavm -- int )
319 dup JavaVM-functions JNIInvokeInterface-DestroyJavaVM (destroy-java-vm) ;
322 "jint" { "JNIEnv*" } "cdecl" alien-indirect ;
324 : get-version ( jnienv -- int )
325 dup JNIEnv-functions JNINativeInterface-GetVersion (get-version) ;
328 "void*" { "JNINativeInterface*" "char*" } "cdecl" alien-indirect ;
330 : find-class ( name jnienv -- int )
331 dup swapd JNIEnv-functions JNINativeInterface-FindClass (find-class) ;
333 : (get-static-field-id)
334 "void*" { "JNINativeInterface*" "void*" "char*" "char*" } "cdecl" alien-indirect ;
336 : get-static-field-id ( class name sig jnienv -- int )
337 dup >r >r 3array r> swap first3 r> JNIEnv-functions JNINativeInterface-GetStaticFieldID (get-static-field-id) ;
339 : (get-static-object-field)
340 "void*" { "JNINativeInterface*" "void*" "void*" } "cdecl" alien-indirect ;
342 : get-static-object-field ( class id jnienv -- int )
343 dup >r >r 2array r> swap first2 r> JNIEnv-functions JNINativeInterface-GetStaticObjectField (get-static-object-field) ;
346 "void*" { "JNINativeInterface*" "void*" "char*" "char*" } "cdecl" alien-indirect ;
348 : get-method-id ( class name sig jnienv -- int )
349 dup >r >r 3array r> swap first3 r> JNIEnv-functions JNINativeInterface-GetMethodID (get-method-id) ;
352 "void*" { "JNINativeInterface*" "char*" "int" } "cdecl" alien-indirect ;
354 : new-string ( str jnienv -- str )
355 dup >r >r dup length 2array r> swap first2 r> JNIEnv-functions JNINativeInterface-NewString (new-string) ;
358 "void" { "JNINativeInterface*" "void*" "void*" "int" } "cdecl" alien-indirect ;
360 : call1 ( obj method-id jstr jnienv -- )
361 dup >r >r 3array r> swap first3 r> JNIEnv-functions JNINativeInterface-CallObjectMethod (call1) ;