This is the mail archive of the
kawa@sources.redhat.com
mailing list for the Kawa project.
find-class and type->java-class patch
- From: Chris Dean <ctdean at sokitomi dot com>
- To: Kawa List <kawa at sources dot redhat dot com>
- Date: Mon, 02 Aug 2004 21:17:06 -0700
- Subject: find-class and type->java-class patch
Here's a patch to add two new procedures:
- Function: find-class value
Returns the class type named by VALUE. VALUE is expected to be a
symbol with the same name as the Java class.
- Function: type->java-class class-type
Returns the Java class named by CLASS-TYPE. CLASS-TYPE is
expected to be the internal class type of Kawa objects.
I debated for quite a while if this should be called find-class or
find-type, and settled on find-class because that reminds me of the CL
function of the same name.
Regards,
Chris Dean
Index: doc/kawa.texi
===================================================================
RCS file: /cvs/kawa/kawa/doc/kawa.texi,v
retrieving revision 1.150
diff -u -w -r1.150 kawa.texi
--- doc/kawa.texi 28 Jul 2004 22:36:49 -0000 1.150
+++ doc/kawa.texi 3 Aug 2004 03:21:54 -0000
@@ -2676,6 +2676,16 @@
Not supported for @var{type} to be a primitive type such as @code{<int>}.
@end defun
+@defun find-class value
+Returns the class type named by @var{value}. @var{value} is expected to
+be a symbol with the same name as the Java class.
+@end defun
+
+@defun type->java-class class-type
+Returns the Java class named by @var{class-type}. @var{class-type} is
+expected to be the internal class type of Kawa objects.
+@end defun
+
@deffn Syntax synchronized object form ...
Synchronize on the given @var{object}. (This means getting an
exclusive lock on the object, by acquiring its @dfn{monitor}.)
Index: gnu/kawa/reflect/Makefile.am
===================================================================
RCS file: /cvs/kawa/kawa/gnu/kawa/reflect/Makefile.am,v
retrieving revision 1.15
diff -u -w -r1.15 Makefile.am
--- gnu/kawa/reflect/Makefile.am 13 May 2003 15:38:56 -0000 1.15
+++ gnu/kawa/reflect/Makefile.am 3 Aug 2004 03:21:54 -0000
@@ -10,6 +10,7 @@
ClassMemberConstraint.java \
ClassMethods.java \
InstanceOf.java \
+ FindClass.java \
Invoke.java \
OccurrenceType.java \
SlotGet.java \
Index: gnu/kawa/reflect/Makefile.in
===================================================================
RCS file: /cvs/kawa/kawa/gnu/kawa/reflect/Makefile.in,v
retrieving revision 1.32
diff -u -w -r1.32 Makefile.in
--- gnu/kawa/reflect/Makefile.in 29 Oct 2003 03:56:37 -0000 1.32
+++ gnu/kawa/reflect/Makefile.in 3 Aug 2004 03:21:54 -0000
@@ -199,6 +199,7 @@
ClassMemberConstraint.java \
ClassMethods.java \
InstanceOf.java \
+ FindClass.java \
Invoke.java \
OccurrenceType.java \
SlotGet.java \
Index: kawa/lib/reflection.scm
===================================================================
RCS file: /cvs/kawa/kawa/kawa/lib/reflection.scm,v
retrieving revision 1.12
diff -u -w -r1.12 reflection.scm
--- kawa/lib/reflection.scm 6 Nov 2001 01:00:23 -0000 1.12
+++ kawa/lib/reflection.scm 3 Aug 2004 03:21:54 -0000
@@ -135,3 +135,6 @@
<kawa.lang.method> (<object> <symbol>))
object name))
|#
+
+(define (type->java-class class-type)
+ (gnu.bytecode.ClassType:getReflectClass class-type))
Index: kawa/standard/Scheme.java
===================================================================
RCS file: /cvs/kawa/kawa/kawa/standard/Scheme.java,v
retrieving revision 1.152
diff -u -w -r1.152 Scheme.java
--- kawa/standard/Scheme.java 21 Jul 2004 00:06:11 -0000 1.152
+++ kawa/standard/Scheme.java 3 Aug 2004 03:21:54 -0000
@@ -54,6 +54,7 @@
static Scheme instance;
public static gnu.kawa.reflect.InstanceOf instanceOf;
+ public static gnu.kawa.reflect.FindClass findClass;;
public static not not;
public static kawa.standard.map map;
public static kawa.standard.map forEach;
@@ -444,6 +445,7 @@
define_syntax("primitive-array-set", "kawa.lib.reflection");
define_syntax("primitive-array-length", "kawa.lib.reflection");
define_proc("subtype?", "kawa.lib.reflection");
+ define_proc("type->java-class", "kawa.lib.reflection");
define_field("primitive-throw", "kawa.standard.prim_throw", "primitiveThrow");
define_syntax("try-finally", "kawa.standard.try_finally");
define_syntax("try-catch", "kawa.standard.try_catch");
@@ -452,6 +454,7 @@
define_proc("error", "kawa.lib.misc");
define_proc("as", gnu.kawa.functions.Convert.as);
define_field("instance?", "kawa.standard.Scheme", "instanceOf");
+ define_field("find-class", "kawa.standard.Scheme", "findClass");
define_syntax("synchronized", "kawa.standard.synchronizd");
object objectSyntax = new kawa.standard.object(lambda);
define_syntax("object", objectSyntax);
@@ -684,6 +687,7 @@
{
instance = this;
instanceOf = new gnu.kawa.reflect.InstanceOf(this, "instance?");
+ findClass = new gnu.kawa.reflect.FindClass(this, "find-class");
not = new not(this, "not");
map = new map(true);
forEach = new map(false);
Index: gnu/kawa/reflect/FindClass.java
===================================================================
diff -u /dev/null gnu/kawa/reflect/FindClass.java
--- /dev/null Fri Jul 30 22:36:19 2004
+++ gnu/kawa/reflect/FindClass.java Mon Aug 2 20:11:40 2004
@@ -0,0 +1,49 @@
+package gnu.kawa.reflect;
+import gnu.bytecode.*;
+import gnu.mapping.*;
+import gnu.expr.*;
+
+public class FindClass extends Procedure1 implements CanInline
+{
+ Interpreter interpreter;
+
+ public FindClass(Interpreter interpreter)
+ {
+ this.interpreter = interpreter;
+ }
+
+ public FindClass(Interpreter interpreter, String name)
+ {
+ this.interpreter = interpreter;
+ setName(name);
+ }
+
+ public Object apply1 (Object arg1)
+ {
+ return interpreter.asType(arg1);
+ }
+
+ public Expression inline (ApplyExp exp, ExpWalker walker)
+ {
+ Compilation comp = walker.getCompilation();
+ Expression[] args = exp.getArgs();
+ Type type = interpreter.getTypeFor(args[0]);
+ if (type instanceof PairClassType)
+ type = ((PairClassType) type).instanceType;
+ else if (! (type instanceof Type))
+ return exp;
+
+ if (type instanceof ClassType && ((ClassType) type).isExisting())
+ {
+ try
+ {
+ type.getReflectClass();
+ }
+ catch (Exception ex)
+ {
+ comp.error('e', "unknown class: " + type.getName());
+ }
+ }
+ return new QuoteExp(type).setLine(exp);
+ }
+}
Index: ChangeLog
===================================================================
RCS file: /cvs/kawa/kawa/ChangeLog,v
retrieving revision 1.426
diff -u -w -r1.426 ChangeLog
--- ChangeLog 31 Jul 2004 19:05:52 -0000 1.426
+++ ChangeLog 3 Aug 2004 03:53:19 -0000
@@ -1,3 +1,8 @@
+2004-08-02 Chris Dean <ctdean@sokitomi.com>
+
+ * kawa/standard/Scheme.java: Add find-class and type->java-class
+ functions.
+
2004-07-31 Per Bothner <per@bothner.com>
* kawa/repl.java: Update copyright year printed by --version.
Index: doc/ChangeLog
===================================================================
RCS file: /cvs/kawa/kawa/doc/ChangeLog,v
retrieving revision 1.122
diff -u -w -r1.122 ChangeLog
--- doc/ChangeLog 28 Jul 2004 22:36:50 -0000 1.122
+++ doc/ChangeLog 3 Aug 2004 03:53:19 -0000
@@ -1,3 +1,8 @@
+2004-08-02 Chris Dean <ctdean@sokitomi.com>
+
+ * kawa.texi (Miscellaneous): Add find-class and type->java-class
+ functions.
+
2004-07-27 Chris Dean <ctdean@sokitomi.com>
* kawa.texi (Compilation options): Add --warn-as-error.
Index: gnu/kawa/reflect/ChangeLog
===================================================================
RCS file: /cvs/kawa/kawa/gnu/kawa/reflect/ChangeLog,v
retrieving revision 1.72
diff -u -w -r1.72 ChangeLog
--- gnu/kawa/reflect/ChangeLog 20 Jul 2004 23:41:00 -0000 1.72
+++ gnu/kawa/reflect/ChangeLog 3 Aug 2004 03:53:19 -0000
@@ -1,3 +1,8 @@
+2004-08-02 Chris Dean <ctdean@sokitomi.com>
+
+ * FindClass.java: New class.
+ * Makefile.am (java_sources): Add new file.
+
2004-07-20 Per Bothner <per@bothner.com>
* ArrayLength.java: Remove unused import statements.
Index: kawa/lib/ChangeLog
===================================================================
RCS file: /cvs/kawa/kawa/kawa/lib/ChangeLog,v
retrieving revision 1.108
diff -u -w -r1.108 ChangeLog
--- kawa/lib/ChangeLog 31 Jul 2004 19:03:30 -0000 1.108
+++ kawa/lib/ChangeLog 3 Aug 2004 03:53:19 -0000
@@ -1,3 +1,7 @@
+2004-08-02 Chris Dean <ctdean@sokitomi.com>
+
+ * reflection.scm (type->java-class): New function.
+
2004-07-31 Per Bothner <per@bothner.com>
* syntax.scm (catch): Add type declarations. Simplify using invoke.