diff --git a/src/modules/Java/jvm.c b/src/modules/Java/jvm.c index b359fd67f8abf35880ec6ea9c388fbe01c57ba5d..7da2ab8c7d7aa8d52c84b046f9f0cda39745bdf4 100644 --- a/src/modules/Java/jvm.c +++ b/src/modules/Java/jvm.c @@ -1,5 +1,5 @@ /* - * $Id: jvm.c,v 1.10 1999/12/19 18:23:58 marcus Exp $ + * $Id: jvm.c,v 1.11 1999/12/21 00:04:38 marcus Exp $ * * Pike interface to Java Virtual Machine * @@ -16,7 +16,7 @@ #endif /* HAVE_CONFIG_H */ #include "global.h" -RCSID("$Id: jvm.c,v 1.10 1999/12/19 18:23:58 marcus Exp $"); +RCSID("$Id: jvm.c,v 1.11 1999/12/21 00:04:38 marcus Exp $"); #include "program.h" #include "interpret.h" #include "stralloc.h" @@ -3006,6 +3006,133 @@ static void f_javafatal(INT32 args) push_int(0); } +static void f_new_boolean_array(INT32 args) +{ + JNIEnv *env; + INT_TYPE n; + + get_all_args("new_boolean_array", args, "%i", &n); + pop_n_elems(args); + + if((env = jvm_procure_env(fp->current_object))) { + push_java_array((*env)->NewBooleanArray(env, n), fp->current_object, + env, 'Z'); + jvm_vacate_env(fp->current_object, env); + } else + push_int(0); +} + +static void f_new_byte_array(INT32 args) +{ + JNIEnv *env; + INT_TYPE n; + + get_all_args("new_byte_array", args, "%i", &n); + pop_n_elems(args); + + if((env = jvm_procure_env(fp->current_object))) { + push_java_array((*env)->NewByteArray(env, n), fp->current_object, + env, 'B'); + jvm_vacate_env(fp->current_object, env); + } else + push_int(0); +} + +static void f_new_char_array(INT32 args) +{ + JNIEnv *env; + INT_TYPE n; + + get_all_args("new_char_array", args, "%i", &n); + pop_n_elems(args); + + if((env = jvm_procure_env(fp->current_object))) { + push_java_array((*env)->NewCharArray(env, n), fp->current_object, + env, 'C'); + jvm_vacate_env(fp->current_object, env); + } else + push_int(0); +} + +static void f_new_short_array(INT32 args) +{ + JNIEnv *env; + INT_TYPE n; + + get_all_args("new_short_array", args, "%i", &n); + pop_n_elems(args); + + if((env = jvm_procure_env(fp->current_object))) { + push_java_array((*env)->NewShortArray(env, n), fp->current_object, + env, 'S'); + jvm_vacate_env(fp->current_object, env); + } else + push_int(0); +} + +static void f_new_int_array(INT32 args) +{ + JNIEnv *env; + INT_TYPE n; + + get_all_args("new_int_array", args, "%i", &n); + pop_n_elems(args); + + if((env = jvm_procure_env(fp->current_object))) { + push_java_array((*env)->NewIntArray(env, n), fp->current_object, + env, 'I'); + jvm_vacate_env(fp->current_object, env); + } else + push_int(0); +} + +static void f_new_long_array(INT32 args) +{ + JNIEnv *env; + INT_TYPE n; + + get_all_args("new_long_array", args, "%i", &n); + pop_n_elems(args); + + if((env = jvm_procure_env(fp->current_object))) { + push_java_array((*env)->NewLongArray(env, n), fp->current_object, + env, 'J'); + jvm_vacate_env(fp->current_object, env); + } else + push_int(0); +} + +static void f_new_float_array(INT32 args) +{ + JNIEnv *env; + INT_TYPE n; + + get_all_args("new_float_array", args, "%i", &n); + pop_n_elems(args); + + if((env = jvm_procure_env(fp->current_object))) { + push_java_array((*env)->NewFloatArray(env, n), fp->current_object, + env, 'F'); + jvm_vacate_env(fp->current_object, env); + } else + push_int(0); +} + +static void f_new_double_array(INT32 args) +{ + JNIEnv *env; + INT_TYPE n; + + get_all_args("new_double_array", args, "%i", &n); + pop_n_elems(args); + + if((env = jvm_procure_env(fp->current_object))) { + push_java_array((*env)->NewDoubleArray(env, n), fp->current_object, + env, 'D'); + jvm_vacate_env(fp->current_object, env); + } else + push_int(0); +} #endif /* HAVE_JAVA */ @@ -3211,6 +3338,18 @@ void pike_module_init(void) "function(:void)", 0); add_function("exception_clear", f_exception_clear, "function(:void)", 0); add_function("fatal", f_javafatal, "function(string:void)", 0); + add_function("new_boolean_array", f_new_boolean_array, + "function(int:object)", 0); + add_function("new_byte_array", f_new_byte_array, "function(int:object)", 0); + add_function("new_char_array", f_new_char_array, "function(int:object)", 0); + add_function("new_short_array", f_new_short_array, + "function(int:object)", 0); + add_function("new_int_array", f_new_int_array, "function(int:object)", 0); + add_function("new_long_array", f_new_long_array, "function(int:object)", 0); + add_function("new_float_array", f_new_float_array, + "function(int:object)", 0); + add_function("new_double_array", f_new_double_array, + "function(int:object)", 0); set_init_callback(init_jvm_struct); set_exit_callback(exit_jvm_struct); #ifdef _REENTRANT