summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2006-09-25 19:05:38 +0000
committerRich Hickey <richhickey@gmail.com>2006-09-25 19:05:38 +0000
commitadae71dad2521a9d4c56d50091675a37e0b5161a (patch)
treeacffdca7b826be2ecfe1637f4a5270b7d5f7abf5
parent86fcd18f4ef4d0cfc17df28649ae10b5060f2432 (diff)
made member symbols IFns
-rw-r--r--src/cli/runtime/InstanceMemberSymbol.cs153
-rw-r--r--src/cli/runtime/Reflector.cs2
-rw-r--r--src/cli/runtime/StaticMemberSymbol.cs134
-rw-r--r--src/jvm/clojure/lang/InstanceMemberSymbol.java135
-rw-r--r--src/jvm/clojure/lang/Reflector.java2
-rw-r--r--src/jvm/clojure/lang/StaticMemberSymbol.java134
6 files changed, 554 insertions, 6 deletions
diff --git a/src/cli/runtime/InstanceMemberSymbol.cs b/src/cli/runtime/InstanceMemberSymbol.cs
index 35827e7b..d14cd528 100644
--- a/src/cli/runtime/InstanceMemberSymbol.cs
+++ b/src/cli/runtime/InstanceMemberSymbol.cs
@@ -13,7 +13,7 @@ using System;
namespace clojure.lang
{
-public class InstanceMemberSymbol :HostSymbol {
+public class InstanceMemberSymbol :HostSymbol, IFn {
readonly public String className;
readonly public String memberName;
@@ -25,6 +25,157 @@ else
this.className = name.Substring(1, lastDot-1);
this.memberName = name.Substring(lastDot + 1);
}
+
+public Object invoke() /**/ {
+return AFn.throwArity();
+ }
+
+
+public Object invoke(Object obj) //
+ {
+
+ return Reflector.invokeInstanceMember(memberName, obj);
+ }
+
+public Object invoke(Object obj, Object val) //
+ {
+
+ return Reflector.invokeInstanceMember(memberName, obj, val);
+ }
+
+public Object invoke(Object arg1, Object arg2, Object arg3)
+ {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3);
+ }
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4)
+ {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4);
+ }
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5)
+ {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5);
+ }
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6)
+ {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6);
+ }
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7)
+ {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
+ }
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8)
+ {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
+ }
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9)
+ {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
+ }
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10)
+ {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);
+ }
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11)
+ {
+ return Reflector
+ .invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11);
+ }
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12)
+ {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12);
+ }
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13)
+ {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13);
+ }
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14)
+ {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14);
+ }
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15)
+ {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14, arg15);
+ }
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16)
+ {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14, arg15, arg16);
+ }
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16, Object arg17)
+ {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14, arg15, arg16, arg17);
+ }
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16, Object arg17, Object arg18)
+ {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18);
+ }
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16, Object arg17, Object arg18, Object arg19)
+ {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19);
+ }
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16, Object arg17, Object arg18, Object arg19, Object arg20)
+ {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20);
+ }
+
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16, Object arg17, Object arg18, Object arg19, Object arg20
+ , params Object[] args)
+ {
+ throw new InvalidOperationException("Can't call functions of more than 20 arguments");
+ }
+
+
+public Object applyTo(ISeq arglist) /**/ {
+return AFn.applyToHelper(this, arglist);
+ }
+
}
}
diff --git a/src/cli/runtime/Reflector.cs b/src/cli/runtime/Reflector.cs
index bdf8d32b..e198661b 100644
--- a/src/cli/runtime/Reflector.cs
+++ b/src/cli/runtime/Reflector.cs
@@ -63,7 +63,7 @@ public static Object invokeConstructor(Type t, Object[] args) //throws Exceptio
null, null, args);
}
}
-public static Object invokeStaticMethod(String name, String className, Object[] args) //throws Exception
+public static Object invokeStaticMethod(String name, String className, params Object[] args) //throws Exception
{
Type t = Type.GetType(className);
if (name.Equals("new"))
diff --git a/src/cli/runtime/StaticMemberSymbol.cs b/src/cli/runtime/StaticMemberSymbol.cs
index 509111c9..18393f60 100644
--- a/src/cli/runtime/StaticMemberSymbol.cs
+++ b/src/cli/runtime/StaticMemberSymbol.cs
@@ -13,7 +13,7 @@ using System;
namespace clojure.lang
{
-public class StaticMemberSymbol : HostSymbol{
+public class StaticMemberSymbol : HostSymbol, IFn{
readonly public String className;
readonly public String memberName;
@@ -23,6 +23,138 @@ public StaticMemberSymbol(String name) : base(name) {
this.memberName = name.Substring(lastDot + 1);
}
+public Object invoke() {
+ return Reflector.invokeStaticMethod(memberName, className );
+}
+
+public Object invoke(Object obj) {
+
+ return Reflector.invokeStaticMethod(memberName, className , obj);
+}
+
+public Object invoke(Object obj, Object val) {
+
+ return Reflector.invokeStaticMethod(memberName, className , obj, val);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3) {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4) {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5) {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6) {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7)
+ {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8) {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9) {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10) {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11) {
+ return Reflector
+ .invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12) {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13)
+ {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14)
+ {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15) {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14, arg15);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16) {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14, arg15, arg16);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16, Object arg17) {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14, arg15, arg16, arg17);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16, Object arg17, Object arg18) {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16, Object arg17, Object arg18, Object arg19) {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16, Object arg17, Object arg18, Object arg19, Object arg20)
+ {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20);
+}
+
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16, Object arg17, Object arg18, Object arg19, Object arg20
+ , params Object[] args)
+ {
+ throw new InvalidOperationException("Can't call functions of more than 20 arguments");
+}
+
+public Object applyTo(ISeq arglist) {
+ return AFn.applyToHelper(this, arglist);
+}
+
}
}
diff --git a/src/jvm/clojure/lang/InstanceMemberSymbol.java b/src/jvm/clojure/lang/InstanceMemberSymbol.java
index c100d9bc..e3812f6b 100644
--- a/src/jvm/clojure/lang/InstanceMemberSymbol.java
+++ b/src/jvm/clojure/lang/InstanceMemberSymbol.java
@@ -10,7 +10,7 @@
package clojure.lang;
-public class InstanceMemberSymbol extends HostSymbol{
+public class InstanceMemberSymbol extends HostSymbol implements IFn{
final public String className;
final public String memberName;
@@ -23,4 +23,137 @@ public InstanceMemberSymbol(String name) {
this.className = name.substring(1,lastDot);
this.memberName = name.substring(lastDot + 1);
}
+
+public Object invoke() throws Exception {
+ return AFn.throwArity();
+}
+
+public Object invoke(Object obj) throws Exception {
+
+ return Reflector.invokeInstanceMember(memberName, obj);
+}
+
+public Object invoke(Object obj, Object val) throws Exception {
+
+ return Reflector.invokeInstanceMember(memberName, obj, val);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3) throws Exception {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4) throws Exception {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5) throws Exception {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6) throws Exception {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7)
+ throws Exception {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8) throws Exception {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9) throws Exception {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10) throws Exception {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11) throws Exception {
+ return Reflector
+ .invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12) throws Exception {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13)
+ throws Exception {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14)
+ throws Exception {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15) throws Exception {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14, arg15);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16) throws Exception {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14, arg15, arg16);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16, Object arg17) throws Exception {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14, arg15, arg16, arg17);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16, Object arg17, Object arg18) throws Exception {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16, Object arg17, Object arg18, Object arg19) throws Exception {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16, Object arg17, Object arg18, Object arg19, Object arg20)
+ throws Exception {
+ return Reflector.invokeInstanceMember(memberName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20);
+}
+
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16, Object arg17, Object arg18, Object arg19, Object arg20
+ , Object... args)
+ throws Exception {
+ throw new IllegalArgumentException("Can't call functions of more than 20 arguments");
+}
+
+public Object applyTo(ISeq arglist) throws Exception {
+ return AFn.applyToHelper(this, arglist);
+}
+
}
diff --git a/src/jvm/clojure/lang/Reflector.java b/src/jvm/clojure/lang/Reflector.java
index be5bd41e..90541232 100644
--- a/src/jvm/clojure/lang/Reflector.java
+++ b/src/jvm/clojure/lang/Reflector.java
@@ -90,7 +90,7 @@ public static Object invokeConstructor(Class c, Object[] args) throws Exception
}
}
-public static Object invokeStaticMethod(String name, String className, Object[] args) throws Exception
+public static Object invokeStaticMethod(String name, String className, Object... args) throws Exception
{
Class c = Class.forName(className);
if(name.equals("new"))
diff --git a/src/jvm/clojure/lang/StaticMemberSymbol.java b/src/jvm/clojure/lang/StaticMemberSymbol.java
index 136f2315..2c83bb86 100644
--- a/src/jvm/clojure/lang/StaticMemberSymbol.java
+++ b/src/jvm/clojure/lang/StaticMemberSymbol.java
@@ -10,7 +10,7 @@
package clojure.lang;
-public class StaticMemberSymbol extends HostSymbol{
+public class StaticMemberSymbol extends HostSymbol implements IFn{
final public String className;
final public String memberName;
@@ -21,4 +21,136 @@ public StaticMemberSymbol(String name) {
this.memberName = name.substring(lastDot + 1);
}
+public Object invoke() throws Exception {
+ return Reflector.invokeStaticMethod(memberName, className );
+}
+
+public Object invoke(Object obj) throws Exception {
+
+ return Reflector.invokeStaticMethod(memberName, className , obj);
+}
+
+public Object invoke(Object obj, Object val) throws Exception {
+
+ return Reflector.invokeStaticMethod(memberName, className , obj, val);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3) throws Exception {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4) throws Exception {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5) throws Exception {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6) throws Exception {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7)
+ throws Exception {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8) throws Exception {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9) throws Exception {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10) throws Exception {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11) throws Exception {
+ return Reflector
+ .invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12) throws Exception {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13)
+ throws Exception {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14)
+ throws Exception {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15) throws Exception {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14, arg15);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16) throws Exception {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14, arg15, arg16);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16, Object arg17) throws Exception {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14, arg15, arg16, arg17);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16, Object arg17, Object arg18) throws Exception {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16, Object arg17, Object arg18, Object arg19) throws Exception {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16, Object arg17, Object arg18, Object arg19, Object arg20)
+ throws Exception {
+ return Reflector.invokeStaticMethod(memberName, className , arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,
+ arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20);
+}
+
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16, Object arg17, Object arg18, Object arg19, Object arg20
+ , Object... args)
+ throws Exception {
+ throw new IllegalArgumentException("Can't call functions of more than 20 arguments");
+}
+
+public Object applyTo(ISeq arglist) throws Exception {
+ return AFn.applyToHelper(this, arglist);
+}
+
}