Signed-off-by: Tomek Grabiec <tgrab...@gmail.com> --- vm/jni-interface.c | 75 ++++++++++++++++++++++++--------------------------- 1 files changed, 35 insertions(+), 40 deletions(-)
diff --git a/vm/jni-interface.c b/vm/jni-interface.c index 04c5319..2d8af05 100644 --- a/vm/jni-interface.c +++ b/vm/jni-interface.c @@ -472,24 +472,6 @@ static void vm_jni_delete_local_ref(struct vm_jni_env *env, jobject ref) /* TODO: fix this when GC is implemented. */ } -static jint vm_jni_get_int_field(struct vm_jni_env *env, jobject object, - jfieldID field) -{ - enter_vm_from_jni(); - - if (!object) { - signal_new_exception(vm_java_lang_NullPointerException, NULL); - return 0; - } - - if (vm_field_type(field) != J_INT) { - NOT_IMPLEMENTED; - return 0; - } - - return field_get_int32(object, field); -} - static jint vm_jni_monitor_enter(struct vm_jni_env *env, jobject obj) { enter_vm_from_jni(); @@ -536,24 +518,37 @@ static jobject vm_jni_new_object(struct vm_jni_env *env, jobject clazz, return obj; } -static jobject vm_jni_get_object_field(struct vm_jni_env *env, jobject object, - jfieldID field) -{ - enter_vm_from_jni(); - if (!object) { - signal_new_exception(vm_java_lang_NullPointerException, NULL); - return 0; - } - - if (vm_field_type(field) != J_REFERENCE) { - NOT_IMPLEMENTED; - return 0; - } - - return field_get_object(object, field); +#define DECLARE_GET_XXX_FIELD(type, vmtype) \ +static j ## type \ +vm_jni_get_ ## type ## _field(struct vm_jni_env *env, jobject object, \ + jfieldID field) \ + { \ + enter_vm_from_jni(); \ + \ + if (!object) { \ + signal_new_exception(vm_java_lang_NullPointerException, NULL); \ + return 0; \ + } \ + \ + if (vm_field_type(field) != vmtype) { \ + NOT_IMPLEMENTED; \ + return 0; \ + } \ + \ + return field_get_ ## type (object, field); \ } +DECLARE_GET_XXX_FIELD(boolean, J_BOOLEAN); +DECLARE_GET_XXX_FIELD(byte, J_BYTE); +DECLARE_GET_XXX_FIELD(char, J_CHAR); +DECLARE_GET_XXX_FIELD(double, J_DOUBLE); +DECLARE_GET_XXX_FIELD(float, J_FLOAT); +DECLARE_GET_XXX_FIELD(int, J_INT); +DECLARE_GET_XXX_FIELD(long, J_LONG); +DECLARE_GET_XXX_FIELD(object, J_REFERENCE); +DECLARE_GET_XXX_FIELD(short, J_SHORT); + #define DECLARE_GET_XXX_ARRAY_ELEMENTS(type) \ static j ## type * \ vm_jni_get_ ## type ## _array_elements(struct vm_jni_env *env, \ @@ -1011,16 +1006,16 @@ void *vm_jni_native_interface[] = { /* 95 */ vm_jni_get_object_field, - NULL, /* GetBooleanField */ - NULL, /* GetByteField */ - NULL, /* GetCharField */ - NULL, /* GetShortField */ + vm_jni_get_boolean_field, + vm_jni_get_byte_field, + vm_jni_get_char_field, + vm_jni_get_short_field, /* 100 */ vm_jni_get_int_field, - NULL, /* GetLongField */ - NULL, /* GetFloatField */ - NULL, /* GetDoubleField */ + vm_jni_get_long_field, + vm_jni_get_float_field, + vm_jni_get_double_field, vm_jni_set_object_field, /* 105 */ -- 1.6.0.6 ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ Jatovm-devel mailing list Jatovm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jatovm-devel