summaryrefslogtreecommitdiff
path: root/src/jvm/clojure
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2006-08-01 20:24:20 +0000
committerRich Hickey <richhickey@gmail.com>2006-08-01 20:24:20 +0000
commitdf7b30a6c1dfd253d63786ed8277ab43329a11dd (patch)
tree70ea16a477be769f5867b1646ce61da4e8fbee9f /src/jvm/clojure
parent0c422d65c6dc16d9e2887695ee5f6fa3e07fe617 (diff)
changed max arity to 20
Diffstat (limited to 'src/jvm/clojure')
-rw-r--r--src/jvm/clojure/lang/AFn.java503
-rw-r--r--src/jvm/clojure/lang/Accessor.java179
-rw-r--r--src/jvm/clojure/lang/ArraySeq.java14
-rw-r--r--src/jvm/clojure/lang/IFn.java64
-rw-r--r--src/jvm/clojure/lang/Keyword.java164
-rw-r--r--src/jvm/clojure/lang/Reflector.java32
-rw-r--r--src/jvm/clojure/lang/RestFn.java214
-rw-r--r--src/jvm/clojure/lang/Var.java119
8 files changed, 1060 insertions, 229 deletions
diff --git a/src/jvm/clojure/lang/AFn.java b/src/jvm/clojure/lang/AFn.java
index ae27e48b..8fa5fd33 100644
--- a/src/jvm/clojure/lang/AFn.java
+++ b/src/jvm/clojure/lang/AFn.java
@@ -12,100 +12,419 @@
package clojure.lang;
-public class AFn extends Obj implements IFn, Cloneable{
-
-public Object invoke() throws Exception
- {
- return throwArity();
- }
-
-public Object invoke( Object arg1) throws Exception
- {
- return throwArity();
- }
-
-public Object invoke( Object arg1, Object arg2) throws Exception
- {
- return throwArity();
- }
-
-public Object invoke( Object arg1, Object arg2, Object arg3) throws Exception
- {
- return throwArity();
- }
-
-public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4) throws Exception
- {
- return throwArity();
- }
-
-public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object arg5)
- throws Exception
- {
- return throwArity();
- }
-
-public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object... args)
- throws Exception
- {
- return throwArity();
- }
-
-public Object applyTo( ISeq arglist) throws Exception {
- return applyToHelper(this, arglist);
-}
-static public Object applyToHelper(IFn ifn, ISeq arglist) throws Exception
- {
- switch(RT.boundedLength(arglist, 5))
- {
- case 0:
- return ifn.invoke();
- case 1:
- return ifn.invoke( arglist.first());
- case 2:
- return ifn.invoke( arglist.first()
- , (arglist = arglist.rest()).first()
- );
- case 3:
- return ifn.invoke( arglist.first()
- , (arglist = arglist.rest()).first()
- , (arglist = arglist.rest()).first()
- );
- case 4:
- return ifn.invoke( arglist.first()
- , (arglist = arglist.rest()).first()
- , (arglist = arglist.rest()).first()
- , (arglist = arglist.rest()).first()
- );
- case 5:
- return ifn.invoke( arglist.first()
- , (arglist = arglist.rest()).first()
- , (arglist = arglist.rest()).first()
- , (arglist = arglist.rest()).first()
- , (arglist = arglist.rest()).first()
- );
- default:
- return ifn.invoke( arglist.first()
- , (arglist = arglist.rest()).first()
- , (arglist = arglist.rest()).first()
- , (arglist = arglist.rest()).first()
- , (arglist = arglist.rest()).first()
- , RT.seqToArray(arglist.rest()));
- }
- }
-
-public static Object throwArity()
- {
- throw new IllegalArgumentException("Wrong number of args passed");
- }
+public class AFn extends Obj implements IFn, Cloneable {
+
+public Object invoke() throws Exception {
+ return throwArity();
+}
+
+public Object invoke(Object arg1) throws Exception {
+ return throwArity();
+}
+
+public Object invoke(Object arg1, Object arg2) throws Exception {
+ return throwArity();
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3) throws Exception {
+ return throwArity();
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4) throws Exception {
+ return throwArity();
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5) throws Exception {
+ return throwArity();
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6) throws Exception {
+ return throwArity();
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7)
+ throws Exception {
+ return throwArity();
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8) throws Exception {
+ return throwArity();
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9) throws Exception {
+ return throwArity();
+}
+
+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 throwArity();
+}
+
+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 throwArity();
+}
+
+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 throwArity();
+}
+
+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 throwArity();
+}
+
+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 throwArity();
+}
+
+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 throwArity();
+}
+
+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 throwArity();
+}
+
+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 throwArity();
+}
+
+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 throwArity();
+}
+
+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 throwArity();
+}
+
+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 throwArity();
+}
+
+
+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 {
+ return throwArity();
+}
+
+public Object applyTo(ISeq arglist) throws Exception {
+ return applyToHelper(this, arglist);
+}
+
+static public Object applyToHelper(IFn ifn, ISeq arglist) throws Exception {
+ switch (RT.boundedLength(arglist, 20))
+ {
+ case 0:
+ return ifn.invoke();
+ case 1:
+ return ifn.invoke(arglist.first());
+ case 2:
+ return ifn.invoke(arglist.first()
+ , (arglist = arglist.rest()).first()
+ );
+ case 3:
+ return ifn.invoke(arglist.first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ );
+ case 4:
+ return ifn.invoke(arglist.first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ );
+ case 5:
+ return ifn.invoke(arglist.first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ );
+ case 6:
+ return ifn.invoke(arglist.first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ );
+ case 7:
+ return ifn.invoke(arglist.first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ );
+ case 8:
+ return ifn.invoke(arglist.first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ );
+ case 9:
+ return ifn.invoke(arglist.first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ );
+ case 10:
+ return ifn.invoke(arglist.first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ );
+ case 11:
+ return ifn.invoke(arglist.first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ );
+ case 12:
+ return ifn.invoke(arglist.first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ );
+ case 13:
+ return ifn.invoke(arglist.first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ );
+ case 14:
+ return ifn.invoke(arglist.first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ );
+ case 15:
+ return ifn.invoke(arglist.first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ );
+ case 16:
+ return ifn.invoke(arglist.first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ );
+ case 17:
+ return ifn.invoke(arglist.first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ );
+ case 18:
+ return ifn.invoke(arglist.first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ );
+ case 19:
+ return ifn.invoke(arglist.first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ );
+ case 20:
+ return ifn.invoke(arglist.first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ );
+ default:
+ return ifn.invoke(arglist.first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , (arglist = arglist.rest()).first()
+ , RT.seqToArray(arglist.rest()));
+ }
+}
+
+public static Object throwArity() {
+ throw new IllegalArgumentException("Wrong number of args passed");
+}
public Obj withMeta(IPersistentMap meta) {
- try{
- Obj ret = (Obj) clone();
- ret._meta = meta;
- return ret;
- }
- catch(CloneNotSupportedException ignore)
+ try
+ {
+ Obj ret = (Obj) clone();
+ ret._meta = meta;
+ return ret;
+ }
+ catch (CloneNotSupportedException ignore)
{
return null;
}
diff --git a/src/jvm/clojure/lang/Accessor.java b/src/jvm/clojure/lang/Accessor.java
index 450e7633..208977b5 100644
--- a/src/jvm/clojure/lang/Accessor.java
+++ b/src/jvm/clojure/lang/Accessor.java
@@ -12,69 +12,162 @@
package clojure.lang;
-public class Accessor extends Symbol implements IFn{
+public class Accessor extends Symbol implements IFn {
String memberName;
-Accessor(String name)
- {
- super(name);
- memberName = name.substring(1);
- }
+
+Accessor(String name) {
+ super(name);
+ memberName = name.substring(1);
+}
public Object invoke() throws Exception {
return AFn.throwArity();
}
+
/**
- * Indexer implements IFn for attr access
- * This single arg version is the getter
+ * Indexer implements IFn for attr access
+ * This single arg version is the getter
+ *
* @param obj - must be Obj
* @return the value of the attr or nil if not found
* @throws Exception
*/
-public Object invoke( Object obj) throws Exception
- {
+public Object invoke(Object obj) throws Exception {
- return Reflector.invokeInstanceMember(memberName,obj);
- }
+ return Reflector.invokeInstanceMember(memberName, obj);
+}
/**
- * Indexer implements IFn for attr access
- * This two arg version is the setter
+ * Indexer implements IFn for attr access
+ * This two arg version is the setter
+ *
* @param obj - must be Obj
* @param val
* @return val
* @throws Exception
*/
-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... args)
- throws Exception
- {
- return Reflector.invokeInstanceMember(memberName,arg1,arg2,arg3,arg4,arg5,args);
- }
-
-public Object applyTo( ISeq arglist) throws Exception {
+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/ArraySeq.java b/src/jvm/clojure/lang/ArraySeq.java
index e01459a4..24783727 100644
--- a/src/jvm/clojure/lang/ArraySeq.java
+++ b/src/jvm/clojure/lang/ArraySeq.java
@@ -15,8 +15,9 @@ package clojure.lang;
public class ArraySeq implements IndexedSeq{
final Object[] array;
final int i;
+ISeq _rest;
-static public ArraySeq create(Object[] array){
+static public ArraySeq create(Object... array){
if(array.length == 0)
return null;
return new ArraySeq(array, 0);
@@ -25,6 +26,7 @@ static public ArraySeq create(Object[] array){
ArraySeq(Object[] array, int i){
this.array = array;
this.i = i;
+ this._rest = this;
}
public Object first() {
@@ -32,9 +34,13 @@ public Object first() {
}
public ISeq rest() {
- if(i+1 < array.length)
- return new ArraySeq(array, i + 1);
- return null;
+ if(_rest == this)
+ {
+ if(i+1 < array.length)
+ _rest = new ArraySeq(array, i + 1);
+ _rest = null;
+ }
+ return _rest;
}
public int index(){
diff --git a/src/jvm/clojure/lang/IFn.java b/src/jvm/clojure/lang/IFn.java
index e6f9b474..ab8d108c 100644
--- a/src/jvm/clojure/lang/IFn.java
+++ b/src/jvm/clojure/lang/IFn.java
@@ -12,7 +12,7 @@
package clojure.lang;
-public interface IFn{
+public interface IFn {
public Object invoke() throws Exception;
@@ -24,11 +24,65 @@ public Object invoke(Object arg1, Object arg2, Object arg3) throws Exception;
public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4) throws Exception;
-public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5)
- throws Exception;
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5) throws Exception;
-public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5,
- Object... args) throws Exception;
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6) throws Exception;
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7)
+ throws Exception;
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8) throws Exception;
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9) throws Exception;
+
+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;
+
+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;
+
+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;
+
+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;
+
+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;
+
+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;
+
+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;
+
+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;
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Ob