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