1 /********************************** jni.c *****************************************
3 implementation of the Java Native Interface functions
4 which are used in the JNI function table
6 ***********************************************************************************/
9 #define JNI_VERSION 0x00010002
12 /********************* accessing instance-fields **********************************/
14 #define setField(obj,typ,var,val) *((typ*) ((long int) obj + (long int) var->offset))=val;
15 #define getField(obj,typ,var) *((typ*) ((long int) obj + (long int) var->offset))
16 #define setfield_critical(clazz,obj,name,sig,jdatatype,val) setField(obj,jdatatype,getFieldID_critical(env,clazz,name,sig),val);
18 /*************************** function: jclass_findfield ****************************
20 searches for field with specified name and type in a 'classinfo'-structur
21 if no such field is found NULL is returned
23 ************************************************************************************/
25 fieldinfo *jclass_findfield (classinfo *c, utf *name, utf *desc)
28 for (i = 0; i < c->fieldscount; i++) {
29 if ((c->fields[i].name == name) && (c->fields[i].descriptor == desc))
30 return &(c->fields[i]);
36 /********************* returns version of native method interface *****************/
38 jint GetVersion (JNIEnv* env)
43 /****************** loads a class from a buffer of raw class data *****************/
45 jclass DefineClass(JNIEnv* env, const char *name, jobject loader, const jbyte *buf, jsize len)
49 /* change suck-mode, so subsequent class_load will read from memory-buffer */
50 classload_buffer( (u1*) buf,len);
52 clazz = loader_load(utf_new_char ((char *) name));
54 /* restore old suck-mode */
55 classload_buffer(NULL,0);
61 /*************** loads locally defined class with the specified name **************/
63 jclass FindClass (JNIEnv* env, const char *name)
67 c = loader_load(utf_new_char ((char *) name));
69 if (!c) exceptionptr = native_new_and_init(class_java_lang_ClassFormatError);
75 /***********************************************************************************
77 converts java.lang.reflect.Method or
78 java.lang.reflect.Constructor object to a method ID
80 **********************************************************************************/
82 jmethodID FromReflectedMethod (JNIEnv* env, jobject method)
84 log_text("JNI-Call: FromReflectedMethod");
88 /*************** return superclass of the class represented by sub ****************/
90 jclass GetSuperclass (JNIEnv* env, jclass sub)
94 c = ((classinfo*) sub) -> super;
97 use_class_as_object (c);
102 /*********************** check whether sub can be cast to sup ********************/
104 jboolean IsAssignableForm (JNIEnv* env, jclass sub, jclass sup)
106 return builtin_isanysubclass(sub,sup);
110 /***** converts a field ID derived from cls to a java.lang.reflect.Field object ***/
112 jobject ToReflectedField (JNIEnv* env, jclass cls, jfieldID fieldID, jboolean isStatic)
114 log_text("JNI-Call: ToReflectedField");
118 /***************** throw java.lang.Throwable object ******************************/
120 jint Throw (JNIEnv* env, jthrowable obj)
122 exceptionptr = (java_objectheader*) obj;
127 /***********************************************************************************
129 create exception object from the class clazz with the
130 specified message and cause it to be thrown
132 **********************************************************************************/
135 jint ThrowNew (JNIEnv* env, jclass clazz, const char *msg)
137 java_lang_Throwable *o;
139 /* instantiate exception object */
140 o = (java_lang_Throwable *) native_new_and_init ((classinfo*) clazz);
144 o->detailMessage = (java_lang_String*) javastring_new_char((char *) msg);
146 exceptionptr = (java_objectheader*) o;
150 /************************* check if exception occured *****************************/
152 jthrowable ExceptionOccurred (JNIEnv* env)
154 return (jthrowable) exceptionptr;
157 /********** print exception and a backtrace of the stack (for debugging) **********/
159 void ExceptionDescribe (JNIEnv* env)
161 utf_display(exceptionptr->vftbl->class->name);
167 /******************* clear any exception currently being thrown *******************/
169 void ExceptionClear (JNIEnv* env)
175 /********** raises a fatal error and does not expect the VM to recover ************/
177 void FatalError (JNIEnv* env, const char *msg)
182 /******************* creates a new local reference frame **************************/
184 jint PushLocalFrame (JNIEnv* env, jint capacity)
189 /**************** Pops off the current local reference frame **********************/
191 jobject PopLocalFrame (JNIEnv* env, jobject result)
197 /** Creates a new global reference to the object referred to by the obj argument **/
199 jobject NewGlobalRef (JNIEnv* env, jobject lobj)
201 heap_addreference ( (void**) &lobj);
205 /************* Deletes the global reference pointed to by globalRef **************/
207 void DeleteGlobalRef (JNIEnv* env, jobject gref)
213 /*************** Deletes the local reference pointed to by localRef ***************/
215 void DeleteLocalRef (JNIEnv* env, jobject localRef)
220 /********** Tests whether two references refer to the same Java object ************/
222 jboolean IsSameObject (JNIEnv* env, jobject obj1, jobject obj2)
227 /***** Creates a new local reference that refers to the same object as ref *******/
229 jobject NewLocalRef (JNIEnv* env, jobject ref)
234 /***********************************************************************************
236 Ensures that at least a given number of local references can
237 be created in the current thread
239 **********************************************************************************/
241 jint EnsureLocalCapacity (JNIEnv* env, jint capacity)
243 return 0; /* return 0 on success */
247 /********* Allocates a new Java object without invoking a constructor *************/
249 jobject AllocObject (JNIEnv* env, jclass clazz)
251 java_objectheader *o = builtin_new(clazz);
256 /***********************************************************************************
258 Constructs a new Java object
259 arguments that are to be passed to the constructor are placed after methodID
261 ***********************************************************************************/
263 jobject NewObject (JNIEnv* env, jclass clazz, jmethodID methodID, ...)
265 log_text("JNI-Call: NewObject");
268 /***********************************************************************************
270 Constructs a new Java object
271 arguments that are to be passed to the constructor are placed in va_list args
273 ***********************************************************************************/
275 jobject NewObjectV (JNIEnv* env, jclass clazz, jmethodID methodID, va_list args)
277 log_text("JNI-Call: NewObjectV");
280 /***********************************************************************************
282 Constructs a new Java object
283 arguments that are to be passed to the constructor are placed in
284 args array of jvalues
286 ***********************************************************************************/
288 jobject NewObjectA (JNIEnv* env, jclass clazz, jmethodID methodID, jvalue *args)
290 log_text("JNI-Call: NewObjectA");
294 /************************ returns the class of an object **************************/
296 jclass GetObjectClass (JNIEnv* env, jobject obj)
298 classinfo *c = obj->vftbl -> class;
299 use_class_as_object (c);
303 /************* tests whether an object is an instance of a class ******************/
305 jboolean IsInstanceOf (JNIEnv* env, jobject obj, jclass clazz)
307 return builtin_instanceof(obj,clazz);
311 /***************** converts a java.lang.reflect.Field to a field ID ***************/
313 jfieldID FromReflectedField (JNIEnv* env, jobject field)
315 log_text("JNI-Call: FromReflectedField");
318 /**********************************************************************************
320 converts a method ID to a java.lang.reflect.Method or
321 java.lang.reflect.Constructor object
323 **********************************************************************************/
325 jobject ToReflectedMethod (JNIEnv* env, jclass cls, jmethodID methodID, jboolean isStatic)
327 log_text("JNI-Call: ToReflectedMethod");
330 /**************** returns the method ID for an instance method ********************/
332 jmethodID GetMethodID (JNIEnv* env, jclass clazz, const char *name, const char *sig)
336 m = class_resolvemethod (
338 utf_new_char ((char*) name),
339 utf_new_char ((char*) sig)
342 if (!m) exceptionptr = native_new_and_init(class_java_lang_NoSuchMethodError);
347 /******************** JNI-functions for calling instance methods ******************/
349 jobject CallObjectMethod (JNIEnv *env, jobject obj, jmethodID methodID, ...)
351 log_text("JNI-Call: CallObjectMethod");
357 jobject CallObjectMethodV (JNIEnv *env, jobject obj, jmethodID methodID, va_list args)
359 log_text("JNI-Call: CallObjectMethodV");
365 jobject CallObjectMethodA (JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args)
367 log_text("JNI-Call: CallObjectMethodA");
373 jboolean CallBooleanMethod (JNIEnv *env, jobject obj, jmethodID methodID, ...)
375 log_text("JNI-Call: CallBooleanMethod");
380 jboolean CallBooleanMethodV (JNIEnv *env, jobject obj, jmethodID methodID, va_list args)
382 log_text("JNI-Call: CallBooleanMethodV");
387 jboolean CallBooleanMethodA (JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args)
389 log_text("JNI-Call: CallBooleanMethodA");
394 jbyte CallByteMethod (JNIEnv *env, jobject obj, jmethodID methodID, ...)
396 log_text("JNI-Call: CallByteMethod");
401 jbyte CallByteMethodV (JNIEnv *env, jobject obj, jmethodID methodID, va_list args)
403 log_text("JNI-Call: CallByteMethodV");
409 jbyte CallByteMethodA (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args)
411 log_text("JNI-Call: CallByteMethodA");
417 jchar CallCharMethod (JNIEnv *env, jobject obj, jmethodID methodID, ...)
419 log_text("JNI-Call: CallCharMethod");
424 jchar CallCharMethodV (JNIEnv *env, jobject obj, jmethodID methodID, va_list args)
426 log_text("JNI-Call: CallCharMethodV");
432 jchar CallCharMethodA (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args)
434 log_text("JNI-Call: CallCharMethodA");
440 jshort CallShortMethod (JNIEnv *env, jobject obj, jmethodID methodID, ...)
442 log_text("JNI-Call: CallShortMethod");
448 jshort CallShortMethodV (JNIEnv *env, jobject obj, jmethodID methodID, va_list args)
450 log_text("JNI-Call: CallShortMethodV");
456 jshort CallShortMethodA (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args)
458 log_text("JNI-Call: CallShortMethodA");
465 jint CallIntMethod (JNIEnv *env, jobject obj, jmethodID methodID, ...)
467 log_text("JNI-Call: CallIntMethod");
473 jint CallIntMethodV (JNIEnv *env, jobject obj, jmethodID methodID, va_list args)
475 log_text("JNI-Call: CallIntMethodV");
481 jint CallIntMethodA (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args)
483 log_text("JNI-Call: CallIntMethodA");
490 jlong CallLongMethod (JNIEnv *env, jobject obj, jmethodID methodID, ...)
492 log_text("JNI-Call: CallLongMethod");
498 jlong CallLongMethodV (JNIEnv *env, jobject obj, jmethodID methodID, va_list args)
500 log_text("JNI-Call: CallLongMethodV");
506 jlong CallLongMethodA (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args)
508 log_text("JNI-Call: CallLongMethodA");
515 jfloat CallFloatMethod (JNIEnv *env, jobject obj, jmethodID methodID, ...)
517 log_text("JNI-Call: CallFloatMethod");
523 jfloat CallFloatMethodV (JNIEnv *env, jobject obj, jmethodID methodID, va_list args)
525 log_text("JNI-Call: CallFloatMethodV");
531 jfloat CallFloatMethodA (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args)
533 log_text("JNI-Call: CallFloatMethodA");
540 jdouble CallDoubleMethod (JNIEnv *env, jobject obj, jmethodID methodID, ...)
542 log_text("JNI-Call: CallDoubleMethod");
548 jdouble CallDoubleMethodV (JNIEnv *env, jobject obj, jmethodID methodID, va_list args)
550 log_text("JNI-Call: CallDoubleMethodV");
556 jdouble CallDoubleMethodA (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args)
558 log_text("JNI-Call: CallDoubleMethodA");
565 void CallVoidMethod (JNIEnv *env, jobject obj, jmethodID methodID, ...)
567 log_text("JNI-Call: CallVoidMethod");
572 void CallVoidMethodV (JNIEnv *env, jobject obj, jmethodID methodID, va_list args)
574 log_text("JNI-Call: CallVoidMethodV");
579 void CallVoidMethodA (JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args)
581 log_text("JNI-Call: CallVoidMethodA");
587 jobject CallNonvirtualObjectMethod (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...)
589 log_text("JNI-Call: CallNonvirtualObjectMethod");
595 jobject CallNonvirtualObjectMethodV (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args)
597 log_text("JNI-Call: CallNonvirtualObjectMethodV");
603 jobject CallNonvirtualObjectMethodA (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, jvalue * args)
605 log_text("JNI-Call: CallNonvirtualObjectMethodA");
612 jboolean CallNonvirtualBooleanMethod (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...)
614 log_text("JNI-Call: CallNonvirtualBooleanMethod");
620 jboolean CallNonvirtualBooleanMethodV (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args)
622 log_text("JNI-Call: CallNonvirtualBooleanMethodV");
628 jboolean CallNonvirtualBooleanMethodA (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, jvalue * args)
630 log_text("JNI-Call: CallNonvirtualBooleanMethodA");
637 jbyte CallNonvirtualByteMethod (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...)
639 log_text("JNI-Call: CallNonvirtualByteMethod");
645 jbyte CallNonvirtualByteMethodV (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args)
647 log_text("JNI-Call: CallNonvirtualByteMethodV");
653 jbyte CallNonvirtualByteMethodA (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, jvalue *args)
655 log_text("JNI-Call: CallNonvirtualByteMethodA");
662 jchar CallNonvirtualCharMethod (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...)
664 log_text("JNI-Call: CallNonvirtualCharMethod");
670 jchar CallNonvirtualCharMethodV (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args)
672 log_text("JNI-Call: CallNonvirtualCharMethodV");
678 jchar CallNonvirtualCharMethodA (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, jvalue *args)
680 log_text("JNI-Call: CallNonvirtualCharMethodA");
687 jshort CallNonvirtualShortMethod (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...)
689 log_text("JNI-Call: CallNonvirtualShortMethod");
695 jshort CallNonvirtualShortMethodV (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args)
697 log_text("JNI-Call: CallNonvirtualShortMethodV");
703 jshort CallNonvirtualShortMethodA (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, jvalue *args)
705 log_text("JNI-Call: CallNonvirtualShortMethodA");
712 jint CallNonvirtualIntMethod (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...)
714 log_text("JNI-Call: CallNonvirtualIntMethod");
720 jint CallNonvirtualIntMethodV (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args)
722 log_text("JNI-Call: CallNonvirtualIntMethodV");
728 jint CallNonvirtualIntMethodA (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, jvalue *args)
730 log_text("JNI-Call: CallNonvirtualIntMethodA");
737 jlong CallNonvirtualLongMethod (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...)
739 log_text("JNI-Call: CallNonvirtualLongMethod");
745 jlong CallNonvirtualLongMethodV (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args)
747 log_text("JNI-Call: CallNonvirtualLongMethodV");
753 jlong CallNonvirtualLongMethodA (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, jvalue *args)
755 log_text("JNI-Call: CallNonvirtualLongMethodA");
762 jfloat CallNonvirtualFloatMethod (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...)
764 log_text("JNI-Call: CallNonvirtualFloatMethod");
770 jfloat CallNonvirtualFloatMethodV (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args)
772 log_text("JNI-Call: CallNonvirtualFloatMethodV");
778 jfloat CallNonvirtualFloatMethodA (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, jvalue *args)
780 log_text("JNI-Call: CallNonvirtualFloatMethodA");
787 jdouble CallNonvirtualDoubleMethod (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...)
789 log_text("JNI-Call: CallNonvirtualDoubleMethod");
795 jdouble CallNonvirtualDoubleMethodV (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args)
797 log_text("JNI-Call: CallNonvirtualDoubleMethodV");
803 jdouble CallNonvirtualDoubleMethodA (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, jvalue *args)
805 log_text("JNI-Call: CallNonvirtualDoubleMethodA");
812 void CallNonvirtualVoidMethod (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...)
814 log_text("JNI-Call: CallNonvirtualVoidMethod");
818 void CallNonvirtualVoidMethodV (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args)
820 log_text("JNI-Call: CallNonvirtualVoidMethodV");
824 void CallNonvirtualVoidMethodA (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, jvalue * args)
826 log_text("JNI-Call: CallNonvirtualVoidMethodA");
829 /************************* JNI-functions for accessing fields ************************/
831 jfieldID GetFieldID (JNIEnv *env, jclass clazz, const char *name, const char *sig)
835 f = jclass_findfield(clazz,
836 utf_new_char ((char*) name),
837 utf_new_char ((char*) sig)
840 if (!f) exceptionptr = native_new_and_init(class_java_lang_NoSuchFieldError);
845 /*************************** retrieve fieldid, abort on error ************************/
847 jfieldID getFieldID_critical(JNIEnv *env,jclass clazz,const char *name,const char *sig)
849 jfieldID id = env->GetFieldID(env,clazz,name,sig);
850 if (!id) panic("setfield_critical failed");
854 jobject GetObjectField (JNIEnv *env, jobject obj, jfieldID fieldID)
856 return getField(obj,jobject,fieldID);
859 jboolean GetBooleanField (JNIEnv *env, jobject obj, jfieldID fieldID)
861 return getField(obj,jboolean,fieldID);
865 jbyte GetByteField (JNIEnv *env, jobject obj, jfieldID fieldID)
867 return getField(obj,jbyte,fieldID);
871 jchar GetCharField (JNIEnv *env, jobject obj, jfieldID fieldID)
873 return getField(obj,jchar,fieldID);
877 jshort GetShortField (JNIEnv *env, jobject obj, jfieldID fieldID)
879 return getField(obj,jshort,fieldID);
883 jint GetIntField (JNIEnv *env, jobject obj, jfieldID fieldID)
885 return getField(obj,jint,fieldID);
889 jlong GetLongField (JNIEnv *env, jobject obj, jfieldID fieldID)
891 return getField(obj,jlong,fieldID);
895 jfloat GetFloatField (JNIEnv *env, jobject obj, jfieldID fieldID)
897 return getField(obj,jfloat,fieldID);
901 jdouble GetDoubleField (JNIEnv *env, jobject obj, jfieldID fieldID)
903 return getField(obj,jdouble,fieldID);
906 void SetObjectField (JNIEnv *env, jobject obj, jfieldID fieldID, jobject val)
908 setField(obj,jobject,fieldID,val);
912 void SetBooleanField (JNIEnv *env, jobject obj, jfieldID fieldID, jboolean val)
914 setField(obj,jboolean,fieldID,val);
918 void SetByteField (JNIEnv *env, jobject obj, jfieldID fieldID, jbyte val)
920 setField(obj,jbyte,fieldID,val);
924 void SetCharField (JNIEnv *env, jobject obj, jfieldID fieldID, jchar val)
926 setField(obj,jchar,fieldID,val);
930 void SetShortField (JNIEnv *env, jobject obj, jfieldID fieldID, jshort val)
932 setField(obj,jshort,fieldID,val);
936 void SetIntField (JNIEnv *env, jobject obj, jfieldID fieldID, jint val)
938 setField(obj,jint,fieldID,val);
942 void SetLongField (JNIEnv *env, jobject obj, jfieldID fieldID, jlong val)
944 setField(obj,jlong,fieldID,val);
948 void SetFloatField (JNIEnv *env, jobject obj, jfieldID fieldID, jfloat val)
950 setField(obj,jfloat,fieldID,val);
954 void SetDoubleField (JNIEnv *env, jobject obj, jfieldID fieldID, jdouble val)
956 setField(obj,jdouble,fieldID,val);
959 /**************** JNI-functions for calling static methods **********************/
961 jmethodID GetStaticMethodID (JNIEnv *env, jclass clazz, const char *name, const char *sig)
965 m = class_resolvemethod (
967 utf_new_char ((char*) name),
968 utf_new_char ((char*) sig)
971 if (!m) exceptionptr = native_new_and_init(class_java_lang_NoSuchMethodError);
976 jobject CallStaticObjectMethod (JNIEnv *env, jclass clazz, jmethodID methodID, ...)
978 log_text("JNI-Call: CallStaticObjectMethod");
984 jobject CallStaticObjectMethodV (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args)
986 log_text("JNI-Call: CallStaticObjectMethodV");
992 jobject CallStaticObjectMethodA (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args)
994 log_text("JNI-Call: CallStaticObjectMethodA");
1000 jboolean CallStaticBooleanMethod (JNIEnv *env, jclass clazz, jmethodID methodID, ...)
1002 log_text("JNI-Call: CallStaticBooleanMethod");
1008 jboolean CallStaticBooleanMethodV (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args)
1010 log_text("JNI-Call: CallStaticBooleanMethodV");
1016 jboolean CallStaticBooleanMethodA (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args)
1018 log_text("JNI-Call: CallStaticBooleanMethodA");
1024 jbyte CallStaticByteMethod (JNIEnv *env, jclass clazz, jmethodID methodID, ...)
1026 log_text("JNI-Call: CallStaticByteMethod");
1032 jbyte CallStaticByteMethodV (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args)
1034 log_text("JNI-Call: CallStaticByteMethodV");
1040 jbyte CallStaticByteMethodA (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args)
1042 log_text("JNI-Call: CallStaticByteMethodA");
1047 jchar CallStaticCharMethod (JNIEnv *env, jclass clazz, jmethodID methodID, ...)
1049 log_text("JNI-Call: CallStaticCharMethod");
1055 jchar CallStaticCharMethodV (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args)
1057 log_text("JNI-Call: CallStaticCharMethodV");
1063 jchar CallStaticCharMethodA (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args)
1065 log_text("JNI-Call: CallStaticCharMethodA");
1072 jshort CallStaticShortMethod (JNIEnv *env, jclass clazz, jmethodID methodID, ...)
1074 log_text("JNI-Call: CallStaticShortMethod");
1080 jshort CallStaticShortMethodV (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args)
1082 log_text("JNI-Call: CallStaticShortMethodV");
1088 jshort CallStaticShortMethodA (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args)
1090 log_text("JNI-Call: CallStaticShortMethodA");
1097 jint CallStaticIntMethod (JNIEnv *env, jclass clazz, jmethodID methodID, ...)
1099 log_text("JNI-Call: CallStaticIntMethod");
1105 jint CallStaticIntMethodV (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args)
1107 log_text("JNI-Call: CallStaticIntMethodV");
1113 jint CallStaticIntMethodA (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args)
1115 log_text("JNI-Call: CallStaticIntMethodA");
1122 jlong CallStaticLongMethod (JNIEnv *env, jclass clazz, jmethodID methodID, ...)
1124 log_text("JNI-Call: CallStaticLongMethod");
1130 jlong CallStaticLongMethodV (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args)
1132 log_text("JNI-Call: CallStaticLongMethodV");
1138 jlong CallStaticLongMethodA (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args)
1140 log_text("JNI-Call: CallStaticLongMethodA");
1147 jfloat CallStaticFloatMethod (JNIEnv *env, jclass clazz, jmethodID methodID, ...)
1149 log_text("JNI-Call: CallStaticFloatMethod");
1155 jfloat CallStaticFloatMethodV (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args)
1157 log_text("JNI-Call: CallStaticFloatMethodV");
1163 jfloat CallStaticFloatMethodA (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args)
1165 log_text("JNI-Call: CallStaticFloatMethodA");
1172 jdouble CallStaticDoubleMethod (JNIEnv *env, jclass clazz, jmethodID methodID, ...)
1174 log_text("JNI-Call: CallStaticDoubleMethod");
1180 jdouble CallStaticDoubleMethodV (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args)
1182 log_text("JNI-Call: CallStaticDoubleMethodV");
1188 jdouble CallStaticDoubleMethodA (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args)
1190 log_text("JNI-Call: CallStaticDoubleMethodA");
1197 void CallStaticVoidMethod (JNIEnv *env, jclass cls, jmethodID methodID, ...)
1199 log_text("JNI-Call: CallStaticVoidMethod");
1204 void CallStaticVoidMethodV (JNIEnv *env, jclass cls, jmethodID methodID, va_list args)
1206 log_text("JNI-Call: CallStaticVoidMethodV");
1211 void CallStaticVoidMethodA (JNIEnv *env, jclass cls, jmethodID methodID, jvalue * args)
1213 log_text("JNI-Call: CallStaticVoidMethodA");
1217 /****************** JNI-functions for accessing static fields ********************/
1219 jfieldID GetStaticFieldID (JNIEnv *env, jclass clazz, const char *name, const char *sig)
1223 f = jclass_findfield(clazz,
1224 utf_new_char ((char*) name),
1225 utf_new_char ((char*) sig)
1228 if (!f) exceptionptr = native_new_and_init(class_java_lang_NoSuchFieldError);
1234 jobject GetStaticObjectField (JNIEnv *env, jclass clazz, jfieldID fieldID)
1237 return fieldID->value.a;
1241 jboolean GetStaticBooleanField (JNIEnv *env, jclass clazz, jfieldID fieldID)
1244 return fieldID->value.i;
1248 jbyte GetStaticByteField (JNIEnv *env, jclass clazz, jfieldID fieldID)
1251 return fieldID->value.i;
1255 jchar GetStaticCharField (JNIEnv *env, jclass clazz, jfieldID fieldID)
1258 return fieldID->value.i;
1262 jshort GetStaticShortField (JNIEnv *env, jclass clazz, jfieldID fieldID)
1265 return fieldID->value.i;
1269 jint GetStaticIntField (JNIEnv *env, jclass clazz, jfieldID fieldID)
1272 return fieldID->value.i;
1276 jlong GetStaticLongField (JNIEnv *env, jclass clazz, jfieldID fieldID)
1279 return fieldID->value.l;
1283 jfloat GetStaticFloatField (JNIEnv *env, jclass clazz, jfieldID fieldID)
1286 return fieldID->value.f;
1290 jdouble GetStaticDoubleField (JNIEnv *env, jclass clazz, jfieldID fieldID)
1293 return fieldID->value.d;
1298 void SetStaticObjectField (JNIEnv *env, jclass clazz, jfieldID fieldID, jobject value)
1301 fieldID->value.a = value;
1305 void SetStaticBooleanField (JNIEnv *env, jclass clazz, jfieldID fieldID, jboolean value)
1308 fieldID->value.i = value;
1312 void SetStaticByteField (JNIEnv *env, jclass clazz, jfieldID fieldID, jbyte value)
1315 fieldID->value.i = value;
1319 void SetStaticCharField (JNIEnv *env, jclass clazz, jfieldID fieldID, jchar value)
1322 fieldID->value.i = value;
1326 void SetStaticShortField (JNIEnv *env, jclass clazz, jfieldID fieldID, jshort value)
1329 fieldID->value.i = value;
1333 void SetStaticIntField (JNIEnv *env, jclass clazz, jfieldID fieldID, jint value)
1336 fieldID->value.i = value;
1340 void SetStaticLongField (JNIEnv *env, jclass clazz, jfieldID fieldID, jlong value)
1343 fieldID->value.l = value;
1347 void SetStaticFloatField (JNIEnv *env, jclass clazz, jfieldID fieldID, jfloat value)
1350 fieldID->value.f = value;
1354 void SetStaticDoubleField (JNIEnv *env, jclass clazz, jfieldID fieldID, jdouble value)
1357 fieldID->value.d = value;
1361 /***** create new java.lang.String object from an array of Unicode characters ****/
1363 jstring NewString (JNIEnv *env, const jchar *buf, jsize len)
1366 java_lang_String *s;
1369 s = (java_lang_String*) builtin_new (class_java_lang_String);
1370 a = builtin_newarray_char (len);
1372 /* javastring or characterarray could not be created */
1373 if ( (!a) || (!s) ) return NULL;
1376 for (i=0; i<len; i++) a->data[i] = buf[i];
1384 /******************* returns the length of a Java string ***************************/
1386 jsize GetStringLength (JNIEnv *env, jstring str)
1388 return ((java_lang_String*) str)->count;
1392 /******************** convertes javastring to u2-array ****************************/
1394 u2 *javastring_tou2 (jstring so)
1396 java_lang_String *s = (java_lang_String*) so;
1401 if (!s) return NULL;
1404 if (!a) return NULL;
1406 /* allocate memory */
1407 stringbuffer = MNEW( u2 , s->count + 1 );
1410 for (i=0; i<s->count; i++) stringbuffer[i] = a->data[s->offset+i];
1412 /* terminate string */
1413 stringbuffer[i] = '\0';
1415 return stringbuffer;
1418 /********* returns a pointer to an array of Unicode characters of the string *******/
1420 const jchar *GetStringChars (JNIEnv *env, jstring str, jboolean *isCopy)
1422 return javastring_tou2(str);
1425 /**************** native code no longer needs access to chars **********************/
1427 void ReleaseStringChars (JNIEnv *env, jstring str, const jchar *chars)
1429 MFREE(((jchar*) chars),jchar,((java_lang_String*) str)->count);
1432 /************ create new java.lang.String object from utf8-characterarray **********/
1434 jstring NewStringUTF (JNIEnv *env, const char *utf)
1436 log_text("NewStringUTF called");
1439 /****************** returns the utf8 length in bytes of a string *******************/
1441 jsize GetStringUTFLength (JNIEnv *env, jstring string)
1443 java_lang_String *s = (java_lang_String*) string;
1445 return (jsize) u2_utflength(s->value->data, s->count);
1448 /************ converts a Javastring to an array of UTF-8 characters ****************/
1450 const char* GetStringUTFChars (JNIEnv *env, jstring string, jboolean *isCopy)
1452 return javastring_toutf((java_lang_String*) string,false)->text;
1455 /***************** native code no longer needs access to utf ***********************/
1457 void ReleaseStringUTFChars (JNIEnv *env, jstring str, const char* chars)
1459 log_text("JNI-Call: ReleaseStringUTFChars");
1462 /************************** array operations ***************************************/
1464 jsize GetArrayLength (JNIEnv *env, jarray array)
1469 jobjectArray NewObjectArray (JNIEnv *env, jsize len, jclass clazz, jobject init)
1471 java_objectarray *j = builtin_anewarray (len, clazz);
1472 if (!j) exceptionptr = proto_java_lang_OutOfMemoryError;
1476 jobject GetObjectArrayElement (JNIEnv *env, jobjectArray array, jsize index)
1480 if (index<array->header.size)
1481 j = array->data[index];
1483 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1488 void SetObjectArrayElement (JNIEnv *env, jobjectArray array, jsize index, jobject val)
1490 if (index>=array->header.size)
1491 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1494 /* check if the class of value is a subclass of the element class of the array */
1496 if (!builtin_instanceof(val, array->elementtype))
1497 exceptionptr = proto_java_lang_ArrayStoreException;
1499 array->data[index] = val;
1505 jbooleanArray NewBooleanArray (JNIEnv *env, jsize len)
1507 java_booleanarray *j = builtin_newarray_boolean(len);
1508 if (!j) exceptionptr = proto_java_lang_OutOfMemoryError;
1513 jbyteArray NewByteArray (JNIEnv *env, jsize len)
1515 java_bytearray *j = builtin_newarray_byte(len);
1516 if (!j) exceptionptr = proto_java_lang_OutOfMemoryError;
1521 jcharArray NewCharArray (JNIEnv *env, jsize len)
1523 java_chararray *j = builtin_newarray_char(len);
1524 if (!j) exceptionptr = proto_java_lang_OutOfMemoryError;
1529 jshortArray NewShortArray (JNIEnv *env, jsize len)
1531 java_shortarray *j = builtin_newarray_short(len);
1532 if (!j) exceptionptr = proto_java_lang_OutOfMemoryError;
1537 jintArray NewIntArray (JNIEnv *env, jsize len)
1539 java_intarray *j = builtin_newarray_int(len);
1540 if (!j) exceptionptr = proto_java_lang_OutOfMemoryError;
1545 jlongArray NewLongArray (JNIEnv *env, jsize len)
1547 java_longarray *j = builtin_newarray_long(len);
1548 if (!j) exceptionptr = proto_java_lang_OutOfMemoryError;
1553 jfloatArray NewFloatArray (JNIEnv *env, jsize len)
1555 java_floatarray *j = builtin_newarray_float(len);
1556 if (!j) exceptionptr = proto_java_lang_OutOfMemoryError;
1561 jdoubleArray NewDoubleArray (JNIEnv *env, jsize len)
1563 java_doublearray *j = builtin_newarray_double(len);
1564 if (!j) exceptionptr = proto_java_lang_OutOfMemoryError;
1569 jboolean * GetBooleanArrayElements (JNIEnv *env, jbooleanArray array, jboolean *isCopy)
1571 if (isCopy) *isCopy = JNI_FALSE;
1576 jbyte * GetByteArrayElements (JNIEnv *env, jbyteArray array, jboolean *isCopy)
1578 if (isCopy) *isCopy = JNI_FALSE;
1583 jchar * GetCharArrayElements (JNIEnv *env, jcharArray array, jboolean *isCopy)
1585 if (isCopy) *isCopy = JNI_FALSE;
1590 jshort * GetShortArrayElements (JNIEnv *env, jshortArray array, jboolean *isCopy)
1592 if (isCopy) *isCopy = JNI_FALSE;
1597 jint * GetIntArrayElements (JNIEnv *env, jintArray array, jboolean *isCopy)
1599 if (isCopy) *isCopy = JNI_FALSE;
1604 jlong * GetLongArrayElements (JNIEnv *env, jlongArray array, jboolean *isCopy)
1606 if (isCopy) *isCopy = JNI_FALSE;
1611 jfloat * GetFloatArrayElements (JNIEnv *env, jfloatArray array, jboolean *isCopy)
1613 if (isCopy) *isCopy = JNI_FALSE;
1618 jdouble * GetDoubleArrayElements (JNIEnv *env, jdoubleArray array, jboolean *isCopy)
1620 if (isCopy) *isCopy = JNI_FALSE;
1626 void ReleaseBooleanArrayElements (JNIEnv *env, jbooleanArray array, jboolean *elems, jint mode)
1632 void ReleaseByteArrayElements (JNIEnv *env, jbyteArray array, jbyte *elems, jint mode)
1638 void ReleaseCharArrayElements (JNIEnv *env, jcharArray array, jchar *elems, jint mode)
1644 void ReleaseShortArrayElements (JNIEnv *env, jshortArray array, jshort *elems, jint mode)
1650 void ReleaseIntArrayElements (JNIEnv *env, jintArray array, jint *elems, jint mode)
1656 void ReleaseLongArrayElements (JNIEnv *env, jlongArray array, jlong *elems, jint mode)
1662 void ReleaseFloatArrayElements (JNIEnv *env, jfloatArray array, jfloat *elems, jint mode)
1668 void ReleaseDoubleArrayElements (JNIEnv *env, jdoubleArray array, jdouble *elems, jint mode)
1673 void GetBooleanArrayRegion (JNIEnv* env, jbooleanArray array, jsize start, jsize len, jboolean *buf)
1675 if (start<0 || len<0 || start+len>array->header.size)
1676 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1678 memcpy(buf,&array->data[start],len*sizeof(array->data[0]));
1682 void GetByteArrayRegion (JNIEnv* env, jbyteArray array, jsize start, jsize len, jbyte *buf)
1684 if (start<0 || len<0 || start+len>array->header.size)
1685 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1687 memcpy(buf,&array->data[start],len*sizeof(array->data[0]));
1691 void GetCharArrayRegion (JNIEnv* env, jcharArray array, jsize start, jsize len, jchar *buf)
1693 if (start<0 || len<0 || start+len>array->header.size)
1694 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1696 memcpy(buf,&array->data[start],len*sizeof(array->data[0]));
1700 void GetShortArrayRegion (JNIEnv* env, jshortArray array, jsize start, jsize len, jshort *buf)
1702 if (start<0 || len<0 || start+len>array->header.size)
1703 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1705 memcpy(buf,&array->data[start],len*sizeof(array->data[0]));
1709 void GetIntArrayRegion (JNIEnv* env, jintArray array, jsize start, jsize len, jint *buf)
1711 if (start<0 || len<0 || start+len>array->header.size)
1712 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1714 memcpy(buf,&array->data[start],len*sizeof(array->data[0]));
1718 void GetLongArrayRegion (JNIEnv* env, jlongArray array, jsize start, jsize len, jlong *buf)
1720 if (start<0 || len<0 || start+len>array->header.size)
1721 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1723 memcpy(buf,&array->data[start],len*sizeof(array->data[0]));
1727 void GetFloatArrayRegion (JNIEnv* env, jfloatArray array, jsize start, jsize len, jfloat *buf)
1729 if (start<0 || len<0 || start+len>array->header.size)
1730 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1732 memcpy(buf,&array->data[start],len*sizeof(array->data[0]));
1736 void GetDoubleArrayRegion (JNIEnv* env, jdoubleArray array, jsize start, jsize len, jdouble *buf)
1738 if (start<0 || len<0 || start+len>array->header.size)
1739 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1741 memcpy(buf,&array->data[start],len*sizeof(array->data[0]));
1745 void SetBooleanArrayRegion (JNIEnv* env, jbooleanArray array, jsize start, jsize len, jboolean *buf)
1747 if (start<0 || len<0 || start+len>array->header.size)
1748 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1750 memcpy(&array->data[start],buf,len*sizeof(array->data[0]));
1754 void SetByteArrayRegion (JNIEnv* env, jbyteArray array, jsize start, jsize len, jbyte *buf)
1756 if (start<0 || len<0 || start+len>array->header.size)
1757 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1759 memcpy(&array->data[start],buf,len*sizeof(array->data[0]));
1763 void SetCharArrayRegion (JNIEnv* env, jcharArray array, jsize start, jsize len, jchar *buf)
1765 if (start<0 || len<0 || start+len>array->header.size)
1766 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1768 memcpy(&array->data[start],buf,len*sizeof(array->data[0]));
1773 void SetShortArrayRegion (JNIEnv* env, jshortArray array, jsize start, jsize len, jshort *buf)
1775 if (start<0 || len<0 || start+len>array->header.size)
1776 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1778 memcpy(&array->data[start],buf,len*sizeof(array->data[0]));
1782 void SetIntArrayRegion (JNIEnv* env, jintArray array, jsize start, jsize len, jint *buf)
1784 if (start<0 || len<0 || start+len>array->header.size)
1785 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1787 memcpy(&array->data[start],buf,len*sizeof(array->data[0]));
1791 void SetLongArrayRegion (JNIEnv* env, jlongArray array, jsize start, jsize len, jlong *buf)
1793 if (start<0 || len<0 || start+len>array->header.size)
1794 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1796 memcpy(&array->data[start],buf,len*sizeof(array->data[0]));
1800 void SetFloatArrayRegion (JNIEnv* env, jfloatArray array, jsize start, jsize len, jfloat *buf)
1802 if (start<0 || len<0 || start+len>array->header.size)
1803 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1805 memcpy(&array->data[start],buf,len*sizeof(array->data[0]));
1809 void SetDoubleArrayRegion (JNIEnv* env, jdoubleArray array, jsize start, jsize len, jdouble *buf)
1811 if (start<0 || len<0 || start+len>array->header.size)
1812 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1814 memcpy(&array->data[start],buf,len*sizeof(array->data[0]));
1817 jint RegisterNatives (JNIEnv* env, jclass clazz, const JNINativeMethod *methods, jint nMethods)
1819 log_text("JNI-Call: RegisterNatives");
1824 jint UnregisterNatives (JNIEnv* env, jclass clazz)
1826 log_text("JNI-Call: UnregisterNatives");
1830 /******************************* monitor operations ********************************/
1832 jint MonitorEnter (JNIEnv* env, jobject obj)
1834 builtin_monitorenter(obj);
1839 jint MonitorExit (JNIEnv* env, jobject obj)
1841 builtin_monitorexit(obj);
1846 /************************************* JavaVM interface ****************************/
1848 jint GetJavaVM (JNIEnv* env, JavaVM **vm)
1850 log_text("JNI-Call: GetJavaVM");
1854 void GetStringRegion (JNIEnv* env, jstring str, jsize start, jsize len, jchar *buf)
1856 log_text("JNI-Call: GetStringRegion");
1860 void GetStringUTFRegion (JNIEnv* env, jstring str, jsize start, jsize len, char *buf)
1862 log_text("JNI-Call: GetStringUTFRegion");
1866 /****************** obtain direct pointer to array elements ***********************/
1868 void * GetPrimitiveArrayCritical (JNIEnv* env, jarray array, jboolean *isCopy)
1870 java_arrayheader *s = (java_arrayheader*) array;
1872 switch (s->arraytype) {
1873 case ARRAYTYPE_BYTE: return (((java_bytearray*) array)->data);
1874 case ARRAYTYPE_BOOLEAN: return (((java_booleanarray*) array)->data);
1875 case ARRAYTYPE_CHAR: return (((java_chararray*) array)->data);
1876 case ARRAYTYPE_SHORT: return (((java_shortarray*) array)->data);
1877 case ARRAYTYPE_INT: return (((java_intarray*) array)->data);
1878 case ARRAYTYPE_LONG: return (((java_longarray*) array)->data);
1879 case ARRAYTYPE_FLOAT: return (((java_floatarray*) array)->data);
1880 case ARRAYTYPE_DOUBLE: return (((java_doublearray*) array)->data);
1881 case ARRAYTYPE_OBJECT: return (((java_objectarray*) array)->data);
1882 case ARRAYTYPE_ARRAY: return (((java_arrayarray*) array)->data);
1889 void ReleasePrimitiveArrayCritical (JNIEnv* env, jarray array, void *carray, jint mode)
1891 log_text("JNI-Call: ReleasePrimitiveArrayCritical");
1896 /********* returns a pointer to an array of Unicode characters of the string *******/
1898 const jchar * GetStringCritical (JNIEnv* env, jstring string, jboolean *isCopy)
1900 log_text("JNI-Call: GetStringCritical");
1902 return GetStringChars(env,string,isCopy);
1905 /**************** native code no longer needs access to chars **********************/
1907 void ReleaseStringCritical (JNIEnv* env, jstring string, const jchar *cstring)
1909 log_text("JNI-Call: ReleaseStringCritical");
1911 ReleaseStringChars(env,string,cstring);
1915 jweak NewWeakGlobalRef (JNIEnv* env, jobject obj)
1917 log_text("JNI-Call: NewWeakGlobalRef");
1923 void DeleteWeakGlobalRef (JNIEnv* env, jweak ref)
1925 log_text("JNI-Call: DeleteWeakGlobalRef");
1931 /******************************* check for pending exception ***********************/
1934 jboolean ExceptionCheck (JNIEnv* env)
1936 log_text("JNI-Call: ExceptionCheck");
1938 return exceptionptr ? JNI_TRUE : JNI_FALSE;
1941 /********************************* JNI function table ******************************/
1952 &FromReflectedMethod,
1953 &FromReflectedField,
1971 &EnsureLocalCapacity,
1983 &CallBooleanMethodV,
1984 &CallBooleanMethodA,
2009 &CallNonvirtualObjectMethod,
2010 &CallNonvirtualObjectMethodV,
2011 &CallNonvirtualObjectMethodA,
2012 &CallNonvirtualBooleanMethod,
2013 &CallNonvirtualBooleanMethodV,
2014 &CallNonvirtualBooleanMethodA,
2015 &CallNonvirtualByteMethod,
2016 &CallNonvirtualByteMethodV,
2017 &CallNonvirtualByteMethodA,
2018 &CallNonvirtualCharMethod,
2019 &CallNonvirtualCharMethodV,
2020 &CallNonvirtualCharMethodA,
2021 &CallNonvirtualShortMethod,
2022 &CallNonvirtualShortMethodV,
2023 &CallNonvirtualShortMethodA,
2024 &CallNonvirtualIntMethod,
2025 &CallNonvirtualIntMethodV,
2026 &CallNonvirtualIntMethodA,
2027 &CallNonvirtualLongMethod,
2028 &CallNonvirtualLongMethodV,
2029 &CallNonvirtualLongMethodA,
2030 &CallNonvirtualFloatMethod,
2031 &CallNonvirtualFloatMethodV,
2032 &CallNonvirtualFloatMethodA,
2033 &CallNonvirtualDoubleMethod,
2034 &CallNonvirtualDoubleMethodV,
2035 &CallNonvirtualDoubleMethodA,
2036 &CallNonvirtualVoidMethod,
2037 &CallNonvirtualVoidMethodV,
2038 &CallNonvirtualVoidMethodA,
2059 &CallStaticObjectMethod,
2060 &CallStaticObjectMethodV,
2061 &CallStaticObjectMethodA,
2062 &CallStaticBooleanMethod,
2063 &CallStaticBooleanMethodV,
2064 &CallStaticBooleanMethodA,
2065 &CallStaticByteMethod,
2066 &CallStaticByteMethodV,
2067 &CallStaticByteMethodA,
2068 &CallStaticCharMethod,
2069 &CallStaticCharMethodV,
2070 &CallStaticCharMethodA,
2071 &CallStaticShortMethod,
2072 &CallStaticShortMethodV,
2073 &CallStaticShortMethodA,
2074 &CallStaticIntMethod,
2075 &CallStaticIntMethodV,
2076 &CallStaticIntMethodA,
2077 &CallStaticLongMethod,
2078 &CallStaticLongMethodV,
2079 &CallStaticLongMethodA,
2080 &CallStaticFloatMethod,
2081 &CallStaticFloatMethodV,
2082 &CallStaticFloatMethodA,
2083 &CallStaticDoubleMethod,
2084 &CallStaticDoubleMethodV,
2085 &CallStaticDoubleMethodA,
2086 &CallStaticVoidMethod,
2087 &CallStaticVoidMethodV,
2088 &CallStaticVoidMethodA,
2090 &GetStaticObjectField,
2091 &GetStaticBooleanField,
2092 &GetStaticByteField,
2093 &GetStaticCharField,
2094 &GetStaticShortField,
2096 &GetStaticLongField,
2097 &GetStaticFloatField,
2098 &GetStaticDoubleField,
2099 &SetStaticObjectField,
2100 &SetStaticBooleanField,
2101 &SetStaticByteField,
2102 &SetStaticCharField,
2103 &SetStaticShortField,
2105 &SetStaticLongField,
2106 &SetStaticFloatField,
2107 &SetStaticDoubleField,
2111 &ReleaseStringChars,
2113 &GetStringUTFLength,
2115 &ReleaseStringUTFChars,
2118 &GetObjectArrayElement,
2119 &SetObjectArrayElement,
2128 &GetBooleanArrayElements,
2129 &GetByteArrayElements,
2130 &GetCharArrayElements,
2131 &GetShortArrayElements,
2132 &GetIntArrayElements,
2133 &GetLongArrayElements,
2134 &GetFloatArrayElements,
2135 &GetDoubleArrayElements,
2136 &ReleaseBooleanArrayElements,
2137 &ReleaseByteArrayElements,
2138 &ReleaseCharArrayElements,
2139 &ReleaseShortArrayElements,
2140 &ReleaseIntArrayElements,
2141 &ReleaseLongArrayElements,
2142 &ReleaseFloatArrayElements,
2143 &ReleaseDoubleArrayElements,
2144 &GetBooleanArrayRegion,
2145 &GetByteArrayRegion,
2146 &GetCharArrayRegion,
2147 &GetShortArrayRegion,
2149 &GetLongArrayRegion,
2150 &GetFloatArrayRegion,
2151 &GetDoubleArrayRegion,
2152 &SetBooleanArrayRegion,
2153 &SetByteArrayRegion,
2154 &SetCharArrayRegion,
2155 &SetShortArrayRegion,
2157 &SetLongArrayRegion,
2158 &SetFloatArrayRegion,
2159 &SetDoubleArrayRegion,
2166 &GetStringUTFRegion,
2167 &GetPrimitiveArrayCritical,
2168 &ReleasePrimitiveArrayCritical,
2170 &ReleaseStringCritical,
2172 &DeleteWeakGlobalRef,
2177 * These are local overrides for various environment variables in Emacs.
2178 * Please do not remove this and leave it at the end of the file, where
2179 * Emacs will automagically detect them.
2180 * ---------------------------------------------------------------------
2183 * indent-tabs-mode: t