diff options
author | Rich Hickey <richhickey@gmail.com> | 2006-09-25 19:05:38 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2006-09-25 19:05:38 +0000 |
commit | adae71dad2521a9d4c56d50091675a37e0b5161a (patch) | |
tree | acffdca7b826be2ecfe1637f4a5270b7d5f7abf5 /src/cli/runtime | |
parent | 86fcd18f4ef4d0cfc17df28649ae10b5060f2432 (diff) |
made member symbols IFns
Diffstat (limited to 'src/cli/runtime')
-rw-r--r-- | src/cli/runtime/InstanceMemberSymbol.cs | 153 | ||||
-rw-r--r-- | src/cli/runtime/Reflector.cs | 2 | ||||
-rw-r--r-- | src/cli/runtime/StaticMemberSymbol.cs | 134 |
3 files changed, 286 insertions, 3 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);
+}
+
}
}
|