From 84dd798a9a97a573036fb9b40fb86525cb8c12a5 Mon Sep 17 00:00:00 2001 From: Marcus Comstedt <marcus@mc.pp.se> Date: Mon, 14 Jun 1999 16:26:46 +0200 Subject: [PATCH] define_class() and exception_check() implemented. Rev: src/modules/Java/jvm.c:1.8 Rev: src/modules/Java/module.pmod.in.in:1.3 --- src/modules/Java/jvm.c | 43 +++++++++++++++++++++++++++--- src/modules/Java/module.pmod.in.in | 3 +-- 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/src/modules/Java/jvm.c b/src/modules/Java/jvm.c index 85091b8cf2..fda4428651 100644 --- a/src/modules/Java/jvm.c +++ b/src/modules/Java/jvm.c @@ -1,5 +1,5 @@ /* - * $Id: jvm.c,v 1.7 1999/06/14 13:59:15 marcus Exp $ + * $Id: jvm.c,v 1.8 1999/06/14 14:26:45 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.7 1999/06/14 13:59:15 marcus Exp $"); +RCSID("$Id: jvm.c,v 1.8 1999/06/14 14:26:45 marcus Exp $"); #include "program.h" #include "interpret.h" #include "stralloc.h" @@ -140,7 +140,6 @@ struct att_storage { TODO(?): -DefineClass *Reflected* Array stuff @@ -2751,6 +2750,41 @@ static void f_find_class(INT32 args) } } +static void f_define_class(INT32 args) +{ + JNIEnv *env; + struct object *obj; + struct pike_string *str; + struct jobj_storage *ldr; + char *name; + jclass c; + + get_all_args("define_class", args, "%s%o%S", &name, &obj, &str); + if((ldr = THAT_JOBJ(obj))==NULL) + error("Bad argument 2 to define_class().\n"); + if((env = jvm_procure_env(fp->current_object))) { + c = (*env)->DefineClass(env, name, ldr->jobj, (jbyte*)str->str, str->len); + pop_n_elems(args); + push_java_class(c, fp->current_object, env); + jvm_vacate_env(fp->current_object, env); + } else { + pop_n_elems(args); + push_int(0); + } +} + +static void f_exception_check(INT32 args) +{ + JNIEnv *env; + + pop_n_elems(args); + if((env = jvm_procure_env(fp->current_object))) { + push_int((((*env)->ExceptionCheck(env))==JNI_TRUE? 1 : 0)); + jvm_vacate_env(fp->current_object, env); + } else + push_int(0); +} + static void f_exception_occurred(INT32 args) { JNIEnv *env; @@ -2996,6 +3030,9 @@ void pike_module_init(void) add_function("create", f_create, "function(string|void:void)", 0); add_function("get_version", f_get_version, "function(:int)", 0); add_function("find_class", f_find_class, "function(string:object)", 0); + add_function("define_class", f_define_class, + "function(object,string:object)", 0); + add_function("exception_check", f_exception_check, "function(:int)", 0); add_function("exception_occurred", f_exception_occurred, "function(:object)", 0); add_function("exception_describe", f_exception_describe, diff --git a/src/modules/Java/module.pmod.in.in b/src/modules/Java/module.pmod.in.in index fdb09d06ca..2debf93564 100644 --- a/src/modules/Java/module.pmod.in.in +++ b/src/modules/Java/module.pmod.in.in @@ -462,9 +462,8 @@ static class package { return p; if(zero_type(p)) { p = info->jvm->find_class(name==""?n:replace(name, ".", "/")+"/"+n); - if(info->jvm->exception_occurred()) + if(info->jvm->exception_check()) check_exception(info); - /* info->jvm->exception_clear(); */ if(p) p = info->classes[p] || jclass(p, info); return p; -- GitLab