From f39bcf896bb438b20241b25ec1e5c1e8039507f3 Mon Sep 17 00:00:00 2001 From: "H. William Welliver III" <bill@welliver.org> Date: Wed, 17 Sep 2003 15:55:21 -0400 Subject: [PATCH] 1. define_class() disagreed about its args, which apparently should be string, object, string 2. some convenince functions for converting pike primitive datatypes to java Rev: src/modules/Java/jvm.c:1.62 Rev: src/modules/Java/module.pmod.in.in:1.13 --- src/modules/Java/jvm.c | 6 +- src/modules/Java/module.pmod.in.in | 106 +++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+), 3 deletions(-) diff --git a/src/modules/Java/jvm.c b/src/modules/Java/jvm.c index 8d5e444d43..81415f02ec 100644 --- a/src/modules/Java/jvm.c +++ b/src/modules/Java/jvm.c @@ -2,7 +2,7 @@ || This file is part of Pike. For copyright information see COPYRIGHT. || Pike is distributed under GPL, LGPL and MPL. See the file COPYING || for more information. -|| $Id: jvm.c,v 1.61 2003/05/17 20:29:27 grubba Exp $ +|| $Id: jvm.c,v 1.62 2003/09/17 19:55:21 bill Exp $ */ /* @@ -22,7 +22,7 @@ #endif /* HAVE_CONFIG_H */ #include "global.h" -RCSID("$Id: jvm.c,v 1.61 2003/05/17 20:29:27 grubba Exp $"); +RCSID("$Id: jvm.c,v 1.62 2003/09/17 19:55:21 bill Exp $"); #include "program.h" #include "interpret.h" #include "stralloc.h" @@ -3650,7 +3650,7 @@ PIKE_MODULE_INIT pike_add_function("get_version", f_get_version, "function(:int)", 0); pike_add_function("find_class", f_find_class, "function(string:object)", 0); pike_add_function("define_class", f_define_class, - "function(object,string:object)", 0); + "function(string,object,string:object)", 0); pike_add_function("exception_check", f_exception_check, "function(:int)", 0); pike_add_function("exception_occurred", f_exception_occurred, "function(:object)", 0); diff --git a/src/modules/Java/module.pmod.in.in b/src/modules/Java/module.pmod.in.in index 5cde78408f..6747a85ac5 100644 --- a/src/modules/Java/module.pmod.in.in +++ b/src/modules/Java/module.pmod.in.in @@ -56,6 +56,112 @@ static array unwrap_args(array a) }); } +//! +jobject JString(string s) +{ + return pkg["java/lang/String"]-> + _constructor("(Ljava/lang/String;)V")(s); +} + +//! +jobject JBoolean(int i) +{ + if(i) + return pkg["java/lang/Boolean"]->_constructor("(Z)V")(1); + else + return pkg["java/lang/Boolean"]->_constructor("(Z)V")(0); +} + +//! +jobject JInteger(int i) +{ + return pkg["java/lang/Integer"](i); +} + +//! +jobject JFloat(float f) +{ + return pkg["java/lang/Float"]->_constructor("(F)V")(f); +} + +//! +jobject JHashMap(mapping m) +{ + object o=pkg["java/util/HashMap"](); + foreach(indices(m), string k) + { + function a,b; + if(intp(k)) + a=JInteger; + else if(floatp(k)) + a=JFloat; + else if(stringp(k)) + a=lambda(string x){return x;}; + else if(mappingp(k)) + a=JHashMap; + else if(arrayp(k)) + a=JArray; + else if(objectp(k)) + a=lambda(object x){return x;}; + + if(intp(m[k])) + b=JInteger; + else if(floatp(m[k])) + b=JFloat; + else if(stringp(m[k])) + b=lambda(string x){return x;}; + else if(arrayp(m[k])) + b=JArray; + else if(mappingp(m[k])) + b=JHashMap; + else if(objectp(k)) + a=lambda(object x){return x;}; + + o->put(a(k), b(m[k])); + } + return o; +} + +//! +jobject JArray(array a) +{ + object t, o; + + if(sizeof(a) && stringp(a[0])) + t=machine->find_class("java/lang/String"); + else if(sizeof(a) && intp(a[0])) + t=machine->find_class("java/lang/Integer"); + else if(sizeof(a) && floatp(a[0])) + t=machine->find_class("java/lang/Float"); + else if(sizeof(a) && arrayp(a[0])) + t=machine->find_class("java/lang/reflect/Array"); + else if(sizeof(a) && mappingp(a[0])) + t=machine->find_class("java/util/HashMap"); + else if(sizeof(a) && objectp(a[0])) + t=machine->find_class("java/lang/Object"); + + o=pkg["java/lang/reflect/Array"]->newInstance(t, sizeof(a)); + + // let us set the value of each element now + for(int i=0; i<sizeof(a); i++) + { + if(stringp(a[i])) + o[i]=a[i]; + else if(intp(a[i])) + o[i]=JInteger(a[i]); + else if(floatp(a[i])) + o[i]=JFloat(a[i]); + else if(mappingp(a[i])) + o[i]=JHashMap(a[i]); + else if(arrayp(a[i])) + o[i]=JArray(a[i]); + else if(objectp(a[i])) + o[i]=a[i]; + } + + return o; +} + static class jmethod { static object obj; -- GitLab