⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jni.c

📁 kaffe Java 解释器语言,源码,Java的子集系统,开放源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	SET_STATIC_FIELD(jobject, fld, val);	END_EXCEPTION_HANDLING();}static voidKaffe_SetStaticBooleanField(JNIEnv* env, jclass cls, jfieldID fld, jbool val){	BEGIN_EXCEPTION_HANDLING_VOID();	SET_STATIC_FIELD(jboolean, fld, val);	END_EXCEPTION_HANDLING();}static voidKaffe_SetStaticByteField(JNIEnv* env, jclass cls, jfieldID fld, jbyte val){	BEGIN_EXCEPTION_HANDLING_VOID();	SET_STATIC_FIELD(jbyte, fld, val);	END_EXCEPTION_HANDLING();}static voidKaffe_SetStaticCharField(JNIEnv* env, jclass cls, jfieldID fld, jchar val){	BEGIN_EXCEPTION_HANDLING_VOID();	SET_STATIC_FIELD(jchar, fld, val);	END_EXCEPTION_HANDLING();}static voidKaffe_SetStaticShortField(JNIEnv* env, jclass cls, jfieldID fld, jshort val){	BEGIN_EXCEPTION_HANDLING_VOID();	SET_STATIC_FIELD(jshort, fld, val);	END_EXCEPTION_HANDLING();}static voidKaffe_SetStaticIntField(JNIEnv* env, jclass cls, jfieldID fld, jint val){	BEGIN_EXCEPTION_HANDLING_VOID();	SET_STATIC_FIELD(jint, fld, val);	END_EXCEPTION_HANDLING();}static voidKaffe_SetStaticLongField(JNIEnv* env, jclass cls, jfieldID fld, jlong val){	BEGIN_EXCEPTION_HANDLING_VOID();	SET_STATIC_FIELD(jlong, fld, val);	END_EXCEPTION_HANDLING();}static voidKaffe_SetStaticFloatField(JNIEnv* env, jclass cls, jfieldID fld, jfloat val){	BEGIN_EXCEPTION_HANDLING_VOID();	SET_STATIC_FIELD(jfloat, fld, val);	END_EXCEPTION_HANDLING();}static voidKaffe_SetStaticDoubleField(JNIEnv* env, jclass cls, jfieldID fld, jdouble val){	BEGIN_EXCEPTION_HANDLING_VOID();	SET_STATIC_FIELD(jdouble, fld, val);	END_EXCEPTION_HANDLING();}static jstringKaffe_NewString(JNIEnv* env, const jchar* data, jsize len){	Hjava_lang_String* str;	BEGIN_EXCEPTION_HANDLING(0);	str = (Hjava_lang_String*)newObject(StringClass);	unhand(str)->offset = 0;	unhand(str)->count = len;	unhand(str)->value = (HArrayOfChar*)newArray(TYPE_CLASS(TYPE_Char), len);                   	unhand(str)->interned = 0;	memcpy(STRING_DATA(str), data, len * sizeof(jchar));	END_EXCEPTION_HANDLING();	return (str);}static jsizeKaffe_GetStringLength(JNIEnv* env, jstring data){	jsize ret;	BEGIN_EXCEPTION_HANDLING(0);	ret = STRING_SIZE((Hjava_lang_String*)data);	END_EXCEPTION_HANDLING();	return (ret);}static const jchar*Kaffe_GetStringChars(JNIEnv* env, jstring data, jboolean* copy){	jchar* ret;	BEGIN_EXCEPTION_HANDLING(0);	if (copy != NULL) {		*copy = JNI_FALSE;	}	ret = STRING_DATA(((Hjava_lang_String*)data));	END_EXCEPTION_HANDLING();	return (ret);}static jstringKaffe_NewStringUTF(JNIEnv* env, const char* data){	Hjava_lang_String* str;	Utf8Const* utf8;	int len;	BEGIN_EXCEPTION_HANDLING(0);	len = strlen(data);	if (!utf8ConstIsValidUtf8(data, len)) {		str = NULL;	} else {		utf8 = checkPtr(utf8ConstNew(data, len));		str = utf8Const2Java(utf8);		utf8ConstRelease(utf8);		if (!str) {			errorInfo info;			postOutOfMemory(&info);			throwError(&info);		}	}	END_EXCEPTION_HANDLING();	return (str);}static jsizeKaffe_GetStringUTFLength(JNIEnv* env, jstring data){	Hjava_lang_String* const str = (Hjava_lang_String*)data;	jchar* ptr;	jsize len;	jsize count;	jsize i;	BEGIN_EXCEPTION_HANDLING(0);	ptr = STRING_DATA(str);	len = STRING_SIZE(str);	count = 0;	for (i = 0; i < len; i++) {		if (ptr[i] >= 0x0001 && ptr[i] <= 0x007F) {			count += 1;		}		else if (ptr[i] >= 0x0080 && ptr[i] <= 0x07FF) {			count += 2;		}		else {			count += 3;		}	}	END_EXCEPTION_HANDLING();	return (count);}static const jbyte*Kaffe_GetStringUTFChars(JNIEnv* env, jstring data, jbool* copy){	Hjava_lang_String* const str = (Hjava_lang_String*)data;	jchar* ptr;	jbyte* buf;	jsize len;	jsize i;	jsize j;	BEGIN_EXCEPTION_HANDLING(0);	/* We always copy data */	if (copy != NULL) {		*copy = JNI_TRUE;	}	buf = checkPtr(KMALLOC(Kaffe_GetStringUTFLength(env, data) + 1));	ptr = STRING_DATA(str);	len = STRING_SIZE(str);	for (j = 0, i = 0; i < len; i++) {		if (ptr[i] >= 0x0001 && ptr[i] <= 0x007F) {			buf[j++] = ptr[i] & 0x7F;		}		else if (ptr[i] >= 0x0080 && ptr[i] <= 0x07FF) {			buf[j++] = 0xC0 | ((ptr[i] >> 6) & 0x1F);			buf[j++] = 0x80 | (ptr[i] & 0x3F);		}		else {			buf[j++] = 0xE0 | ((ptr[i] >> 12) & 0x0F);			buf[j++] = 0x80 | ((ptr[i] >> 6) & 0x3F);			buf[j++] = 0x80 | (ptr[i] & 0x3F);		}	}	END_EXCEPTION_HANDLING();	return (buf);}static voidKaffe_ReleaseStringUTFChars(JNIEnv* env, jstring data, const jbyte* chars){	BEGIN_EXCEPTION_HANDLING_VOID();	KFREE(chars);	END_EXCEPTION_HANDLING();}static jsizeKaffe_GetArrayLength(JNIEnv* env, jarray arr){	jsize ret;	BEGIN_EXCEPTION_HANDLING(0);	ret = obj_length((HArrayOfObject*)arr);	END_EXCEPTION_HANDLING();	return (ret);}static jobjectArrayKaffe_NewObjectArray(JNIEnv* env, jsize len, jclass cls, jobject init){	HArrayOfObject* obj;	int i;	BEGIN_EXCEPTION_HANDLING(0);	obj = (HArrayOfObject*)newArray((Hjava_lang_Class*)cls, len);	/* I assume this is what init is for */	for (i = 0; i < len; i++) {		unhand_array(obj)->body[i] = (Hjava_lang_Object*)init;	}	ADD_REF(obj);	END_EXCEPTION_HANDLING();	return (obj);}static jobjectKaffe_GetObjectArrayElement(JNIEnv* env, jobjectArray arr, jsize elem){	jobject obj;	BEGIN_EXCEPTION_HANDLING(0);	if (elem >= obj_length((HArrayOfObject*)arr)) {		throwException(ArrayIndexOutOfBoundsException);	}	obj = unhand_array((HArrayOfObject*)arr)->body[elem];	ADD_REF(obj);	END_EXCEPTION_HANDLING();	return (obj);}static voidKaffe_SetObjectArrayElement(JNIEnv* env, jobjectArray arr, jsize elem, jobject val){	BEGIN_EXCEPTION_HANDLING_VOID();	if (elem >= obj_length((HArrayOfObject*)arr)) {		throwException(ArrayIndexOutOfBoundsException);	}	unhand_array((HArrayOfObject*)arr)->body[elem] = (Hjava_lang_Object*)val;	END_EXCEPTION_HANDLING();}static jbooleanArrayKaffe_NewBooleanArray(JNIEnv* env, jsize len){	jbooleanArray arr;	BEGIN_EXCEPTION_HANDLING(0);	arr = newArray(booleanClass, len);	ADD_REF(arr);	END_EXCEPTION_HANDLING();	return (arr);}static jbyteArrayKaffe_NewByteArray(JNIEnv* env, jsize len){	jbyteArray arr;	BEGIN_EXCEPTION_HANDLING(0);	arr = newArray(byteClass, len);	ADD_REF(arr);	END_EXCEPTION_HANDLING();	return (arr);}static jcharArrayKaffe_NewCharArray(JNIEnv* env, jsize len){	jcharArray arr;	BEGIN_EXCEPTION_HANDLING(0);	arr = newArray(charClass, len);	ADD_REF(arr);	END_EXCEPTION_HANDLING();	return (arr);}static jshortArrayKaffe_NewShortArray(JNIEnv* env, jsize len){	jshortArray arr;	BEGIN_EXCEPTION_HANDLING(0);	arr = newArray(shortClass, len);	ADD_REF(arr);	END_EXCEPTION_HANDLING();	return (arr);}static jintArrayKaffe_NewIntArray(JNIEnv* env, jsize len){	jintArray arr;	BEGIN_EXCEPTION_HANDLING(0);	arr = newArray(intClass, len);	ADD_REF(arr);	END_EXCEPTION_HANDLING();	return (arr);}static jlongArrayKaffe_NewLongArray(JNIEnv* env, jsize len){	jlongArray arr;	BEGIN_EXCEPTION_HANDLING(0);	arr = newArray(longClass, len);	ADD_REF(arr);	END_EXCEPTION_HANDLING();	return (arr);}static jfloatArrayKaffe_NewFloatArray(JNIEnv* env, jsize len){	jfloatArray arr;	BEGIN_EXCEPTION_HANDLING(0);	arr = newArray(floatClass, len);	ADD_REF(arr);	END_EXCEPTION_HANDLING();	return (arr);}static jdoubleArrayKaffe_NewDoubleArray(JNIEnv* env, jsize len){	jdoubleArray arr;	BEGIN_EXCEPTION_HANDLING(0);	arr = newArray(doubleClass, len);	ADD_REF(arr);	END_EXCEPTION_HANDLING();	return (arr);}static jboolean*Kaffe_GetBooleanArrayElements(JNIEnv* env, jbooleanArray arr, jbool* iscopy){	jboolean* ret;	BEGIN_EXCEPTION_HANDLING(0);	if (iscopy != NULL) {		*iscopy = JNI_FALSE;	}	ret = unhand_array((HArrayOfBoolean*)arr)->body;	END_EXCEPTION_HANDLING();	return (ret);}static jbyte*Kaffe_GetByteArrayElements(JNIEnv* env, jbyteArray arr, jbool* iscopy){	jbyte* ret;	BEGIN_EXCEPTION_HANDLING(0);	if (iscopy != NULL) {		*iscopy = JNI_FALSE;	}	ret = unhand_array((HArrayOfByte*)arr)->body;	END_EXCEPTION_HANDLING();	return (ret);}static void*Kaffe_GetPrimitiveArrayCritical(JNIEnv* env, jarray arr, jbool* iscopy){  return (Kaffe_GetByteArrayElements(env, (jbyteArray)arr, iscopy));}static jchar*Kaffe_GetCharArrayElements(JNIEnv* env, jcharArray arr, jbool* iscopy){	jchar* ret;	BEGIN_EXCEPTION_HANDLING(0);	if (iscopy != NULL) {		*iscopy = JNI_FALSE;	}	ret = unhand_array((HArrayOfChar*)arr)->body;	END_EXCEPTION_HANDLING();	return (ret);}static jshort*Kaffe_GetShortArrayElements(JNIEnv* env, jshortArray arr, jbool* iscopy){	jshort* ret;	BEGIN_EXCEPTION_HANDLING(0);	if (iscopy != NULL) {		*iscopy = JNI_FALSE;	}	ret = unhand_array((HArrayOfShort*)arr)->body;	END_EXCEPTION_HANDLING();	return (ret);}static jint*Kaffe_GetIntArrayElements(JNIEnv* env, jintArray arr, jbool* iscopy){	jint* ret;	BEGIN_EXCEPTION_HANDLING(0);	if (iscopy != NULL) {		*iscopy = JNI_FALSE;	}	ret = unhand_array((HArrayOfInt*)arr)->body;	END_EXCEPTION_HANDLING();	return (ret);}static jlong*Kaffe_GetLongArrayElements(JNIEnv* env, jlongArray arr, jbool* iscopy){	jlong* ret;	BEGIN_EXCEPTION_HANDLING(0);	if (iscopy != NULL) {		*iscopy = JNI_FALSE;	}	ret = unhand_array((HArrayOfLong*)arr)->body;	END_EXCEPTION_HANDLING();	return (ret);}static jfloat*Kaffe_GetFloatArrayElements(JNIEnv* env, jfloatArray arr, jbool* iscopy){	jfloat* ret;	BEGIN_EXCEPTION_HANDLING(0);	if (iscopy != NULL) {		*iscopy = JNI_FALSE;	}	ret = unhand_array((HArrayOfFloat*)arr)->body;	END_EXCEPTION_HANDLING();	return (ret);}static jdouble*Kaffe_GetDoubleArrayElements(JNIEnv* env, jdoubleArray arr, jbool* iscopy){	jdouble* ret;	BEGIN_EXCEPTION_HANDLING(0);	if (iscopy != NULL) {		*iscopy = JNI_FALSE;	}	ret = unhand_array((HArrayOfDouble*)arr)->body;	END_EXCEPTION_HANDLING();	return (ret);}static voidKaffe_ReleaseBooleanArrayElements(JNIEnv* env, jbooleanArray arr, jbool* elems, jint mode){	BEGIN_EXCEPTION_HANDLING_VOID();	if (elems != unhand_array((HArrayOfBoolean*)arr)->body) {		switch (mode) {		case JNI_COMMIT:			memcpy(unhand_array((HArrayOfBoolean*)arr)->body, elems, obj_length((HArrayOfBoolean*)arr) * sizeof(jboolean));			break;		case 0:			memcpy(unhand_array((HArrayOfBoolean*)arr)->body, elems, obj_length((HArrayOfBoolean*)arr) * sizeof(jboolean));			KFREE(elems);			break;		case JNI_ABORT:			KFREE(elems);			break;		}	}	END_EXCEPTION_HANDLING();}static voidKaffe_ReleaseByteArrayElements(JNIEnv* env, jbyteArray arr, jbyte* elems, jint mode){	BEGIN_EXCEPTION_HANDLING_VOID();	if (elems != unhand_array((HArrayOfByte*)arr)->body) {		switch (mode) {		case JNI_COMMIT:			memcpy(unhand_array((HArrayOfByte*)arr)->body, elems, obj_length((HArrayOfByte*)arr) * sizeof(jbyte));			break;		case 0:			memcpy(unhand_array((HArrayOfByte*)arr)->body, elems, obj_length((HArrayOfByte*)arr) * sizeof(jbyte));			KFREE(elems);			break;		case JNI_ABORT:			KFREE(elems);			break;		}	}	END_EXCEPTION_HANDLING();}static voidKaffe_ReleasePrimitiveArrayCritical(JNIEnv* env, jbyteArray arr, void* elems, jint mode){  Kaffe_ReleaseByteArrayElements(env, (jbyteArray)arr, (jbyte*)elems, mode);}static voidKaffe_ReleaseCharArrayElements(JNIEnv* env, jcharArray arr, jchar* elems, jint mode){	BEGIN_EXCEPTION_HANDLING_VOID();	if (elems != unhand_array((HArrayOfChar*)arr)->body) {		switch (mode) {		case JNI_COMMIT:			memcpy(unhand_array((HArrayOfChar*)arr)->body, elems, obj_length((HArrayOfChar*)arr) * sizeof(jchar));			break;		case 0:			memcpy(unhand_array((HArrayOfChar*)arr)->body, elems, obj_length((HArrayOfChar*)arr) * sizeof(jchar));			KFREE(elems);			break;		case JNI_ABORT:			KFREE(elems);			break;		}	}	END_EXCEPTION_HANDLING();}static voidKaffe_ReleaseShortArrayElements(JNIEnv* env, jshortArray arr, jshort* elems, jint mode){	BEGIN_EXCEPTION_HANDLING_VOID();	if (elems != unhand_array((HArrayOfShort*)arr)->body) {		switch (mode) {		case JNI_COMMIT:			memcpy(unhand_array((HArrayOfShort*)arr)->body, elems, obj_length((HArrayOfShort*)arr) * sizeof(jshort));			break;		case 0:			memcpy(unhand_array((HArrayOfShort*)arr)->body, elems, obj_length((HArrayOfShort*)arr) * sizeof(jshort));			KFREE(elems);			break;		case JNI_ABORT:			KFREE(elems);			break;		}	}	END_EXCEPTION_HANDLING();}static voidKaffe_ReleaseIntArrayElements(JNIEnv* env, jintArray arr, jint* elems, jint mode){	BEGIN_EXCEPTION_HANDLING_VOID();	if (elems != unhand_array((HArrayOfInt*)arr)->body) {		switc

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -