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, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16, Object arg17, Object arg18) 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, Object arg18, Object arg19) 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, Object arg18, Object arg19, Object arg20)
+ 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, Object arg18, Object arg19, Object arg20,
+ Object... args)
+ throws Exception;
public Object applyTo(ISeq arglist) throws Exception;
}
diff --git a/src/jvm/clojure/lang/Keyword.java b/src/jvm/clojure/lang/Keyword.java
index 633100a5..9baa2f4a 100644
--- a/src/jvm/clojure/lang/Keyword.java
+++ b/src/jvm/clojure/lang/Keyword.java
@@ -13,19 +13,17 @@
package clojure.lang;
-public class Keyword extends Symbol implements IFn{
+public class Keyword extends Symbol implements IFn {
/**
* Used by intern()
*
* @param name
-
*/
-Keyword(String name)
- {
- super(name);
- }
+Keyword(String name) {
+ super(name);
+}
public Object invoke() throws Exception {
@@ -33,55 +31,137 @@ public Object invoke() throws Exception {
}
/**
- * 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 {
if (obj == null)
return null;
- return ((IPersistentMap)obj).get(this);
- }
+ return ((IPersistentMap) obj).get(this);
+}
/**
- * 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 ((IPersistentMap)obj).put(this,val);
- }
-
-public Object invoke( Object arg1, Object arg2, Object arg3) throws Exception
- {
- return AFn.throwArity();
- }
-
-public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4) throws Exception
- {
- return AFn.throwArity();
- }
-
-public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object arg5)
- throws Exception
- {
- return AFn.throwArity();
- }
-
-public Object invoke( Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object... args)
- throws Exception
- {
- return AFn.throwArity();
- }
-
-public Object applyTo( ISeq arglist) throws Exception {
+public Object invoke(Object obj, Object val) throws Exception {
+ return ((IPersistentMap) obj).put(this, val);
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3) throws Exception {
+ return AFn.throwArity();
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4) throws Exception {
+ return AFn.throwArity();
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5) throws Exception {
+ return AFn.throwArity();
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6) throws Exception {
+ return AFn.throwArity();
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7)
+ throws Exception {
+ return AFn.throwArity();
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8) throws Exception {
+ return AFn.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 AFn.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 AFn.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 AFn.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 AFn.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 AFn.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 AFn.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 AFn.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 AFn.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 AFn.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 AFn.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 AFn.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 AFn.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 AFn.throwArity();
+}
+
+
+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 13d9bcd3..be5bd41e 100644
--- a/src/jvm/clojure/lang/Reflector.java
+++ b/src/jvm/clojure/lang/Reflector.java
@@ -147,37 +147,9 @@ public static Object invokeInstanceMember(String name, Object target, Object arg
return invokeInstanceMethod(name, target, new Object[]{arg1});
}
-public static Object invokeInstanceMember(String name, Object target, Object arg1, Object arg2) throws Exception
+public static Object invokeInstanceMember(String name, Object target, Object... args) throws Exception
{
- return invokeInstanceMethod(name, target, new Object[]{arg1, arg2});
- }
-
-public static Object invokeInstanceMember(String name, Object target, Object arg1, Object arg2, Object arg3)
- throws Exception
- {
- return invokeInstanceMethod(name, target, new Object[]{arg1, arg2, arg3});
- }
-
-public static Object invokeInstanceMember(String name, Object target, Object arg1, Object arg2, Object arg3,
- Object arg4)
- throws Exception
- {
- return invokeInstanceMethod(name, target, new Object[]{arg1, arg2, arg3, arg4});
- }
-
-public static Object invokeInstanceMember(String name, Object target, Object arg1, Object arg2, Object arg3,
- Object arg4,
- Object... args)
- throws Exception
- {
- Object[] arguments = new Object[4 + args.length];
- arguments[0] = arg1;
- arguments[1] = arg2;
- arguments[2] = arg3;
- arguments[3] = arg4;
- if(args.length > 0)
- System.arraycopy(args, 0, arguments, 4, args.length);
- return invokeInstanceMethod(name, target, arguments);
+ return invokeInstanceMethod(name, target, args);
}
diff --git a/src/jvm/clojure/lang/RestFn.java b/src/jvm/clojure/lang/RestFn.java
new file mode 100644
index 00000000..fd43d9a6
--- /dev/null
+++ b/src/jvm/clojure/lang/RestFn.java
@@ -0,0 +1,214 @@
+/**
+ * Copyright (c) Rich Hickey. All rights reserved.
+ * The use and distribution terms for this software are covered by the
+ * Common Public License 1.0 (http://opensource.org/licenses/cpl.php)
+ * which can be found in the file CPL.TXT at the root of this distribution.
+ * By using this software in any fashion, you are agreeing to be bound by
+ * the terms of this license.
+ * You must not remove this notice, or any other, from this software.
+ **/
+
+package clojure.lang;
+
+public abstract class RestFn extends AFn {
+
+protected int reqArity;
+
+protected abstract Object doInvoke(ISeq args) throws Exception;
+
+RestFn(int reqArity) {
+ this.reqArity = reqArity;
+}
+
+public Object applyTo(ISeq args) throws Exception {
+ if (RT.boundedLength(args, reqArity) <= reqArity)
+ {
+ return AFn.applyToHelper(this, args);
+ }
+ return doInvoke(args);
+}
+
+public Object invoke() throws Exception {
+ return doInvoke(null);
+}
+
+public Object invoke(Object arg1) throws Exception {
+ if (reqArity > 1)
+ return throwArity();
+ return doInvoke(ArraySeq.create(arg1));
+}
+
+public Object invoke(Object arg1, Object arg2) throws Exception {
+ if (reqArity > 2)
+ return throwArity();
+ return doInvoke(ArraySeq.create(arg1, arg2));
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3) throws Exception {
+ if (reqArity > 3)
+ return throwArity();
+ return doInvoke(ArraySeq.create(arg1, arg2, arg3));
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4) throws Exception {
+ if (reqArity > 4)
+ return throwArity();
+ return doInvoke(ArraySeq.create(arg1, arg2, arg3, arg4));
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5) throws Exception {
+ if (reqArity > 5)
+ return throwArity();
+ return doInvoke(ArraySeq.create(arg1, arg2, arg3, arg4, arg5));
+}
+
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6) throws Exception {
+ if (reqArity > 6)
+ return throwArity();
+ return doInvoke(ArraySeq.create(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 {
+ if (reqArity > 7)
+ return throwArity();
+ return doInvoke(ArraySeq.create(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 {
+ if (reqArity > 8)
+ return throwArity();
+ return doInvoke(ArraySeq.create(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 {
+ if (reqArity > 9)
+ return throwArity();
+ return doInvoke(ArraySeq.create(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 {
+ if (reqArity > 10)
+ return throwArity();
+ return doInvoke(ArraySeq.create(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 {
+ if (reqArity > 11)
+ return throwArity();
+ return doInvoke(ArraySeq.create(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 {
+ if (reqArity > 12)
+ return throwArity();
+ return doInvoke(ArraySeq.create(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 {
+ if (reqArity > 13)
+ return throwArity();
+ return doInvoke(ArraySeq.create(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 {
+ if (reqArity > 14)
+ return throwArity();
+ return doInvoke(
+ ArraySeq.create(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 {
+ if (reqArity > 15)
+ return throwArity();
+ return doInvoke(ArraySeq.create(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 {
+ if (reqArity > 16)
+ return throwArity();
+ return doInvoke(ArraySeq.create(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 {
+ if (reqArity > 17)
+ return throwArity();
+ return doInvoke(ArraySeq.create(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 {
+ if (reqArity > 18)
+ return throwArity();
+ return doInvoke(ArraySeq.create(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 {
+ if (reqArity > 19)
+ return throwArity();
+ return doInvoke(ArraySeq.create(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 doInvoke(ArraySeq.create(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 {
+ Object[] arguments = new Object[20 + args.length];
+ arguments[0] = arg1;
+ arguments[1] = arg2;
+ arguments[2] = arg3;
+ arguments[3] = arg4;
+ arguments[4] = arg5;
+ arguments[5] = arg6;
+ arguments[6] = arg7;
+ arguments[7] = arg8;
+ arguments[8] = arg9;
+ arguments[9] = arg10;
+ arguments[10] = arg11;
+ arguments[11] = arg12;
+ arguments[12] = arg13;
+ arguments[13] = arg14;
+ arguments[14] = arg15;
+ arguments[15] = arg16;
+ arguments[16] = arg17;
+ arguments[17] = arg18;
+ arguments[18] = arg19;
+ arguments[19] = arg20;
+ System.arraycopy(args, 0, arguments, 20, args.length);
+ return doInvoke(ArraySeq.create(arguments));
+}
+
+}
+
diff --git a/src/jvm/clojure/lang/Var.java b/src/jvm/clojure/lang/Var.java
index 1b30519c..a879e439 100644
--- a/src/jvm/clojure/lang/Var.java
+++ b/src/jvm/clojure/lang/Var.java
@@ -102,8 +102,8 @@ private void setThreadBinding(Binding b) {
} while (!threadBindings.compareAndSet(tb, newtb));
}
-final public IFn fn(){
- return (IFn)getValue();
+final public IFn fn() {
+ return (IFn) getValue();
}
public Object invoke() throws Exception {
@@ -126,25 +126,118 @@ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4) throws
return fn().invoke(arg1, arg2, arg3, arg4);
}
-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 {
return fn().invoke(arg1, arg2, arg3, arg4, arg5);
}
-public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object... args)
+public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6) throws Exception {
+ return fn().invoke(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 fn().invoke(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 fn().invoke(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 fn().invoke(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 fn().invoke(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 fn().invoke(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 fn().invoke(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 fn().invoke(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 fn().invoke(arg1, arg2, arg3, arg4, arg5, args);
+ return fn().invoke(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 fn().invoke(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 fn().invoke(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 fn().invoke(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 fn().invoke(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 fn().invoke(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 fn().invoke(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 {
+ return fn().invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15,
+ arg16, arg17, arg18, arg19, arg20,args);
+}
+
+
static volatile Integer o = 1;
-public static void main(String[] args){
+public static void main(String[] args) {
try
{
int n = Integer.parseInt(args[0]);
- class Test extends AFn{
+ class Test extends AFn {
int x = 0;
+
public Object invoke(Object arg1) throws Exception {
x += o.intValue();
return this;
@@ -167,18 +260,18 @@ public static void main(String[] args){
rand = new Random(42);
long startTime = System.nanoTime();
- for(int i=0;i<n;i++)
+ for (int i = 0; i < n; i++)
result = test.invoke(result);
long estimatedTime = System.nanoTime() - startTime;
- System.out.println("val:" + result + ", time: " + estimatedTime/1000000);
+ System.out.println("val:" + result + ", time: " + estimatedTime / 1000000);
rand = new Random(42);
startTime = System.nanoTime();
- for(int i=0;i<n;i++)
- result = ((IFn)test.getValue()).invoke(result);
+ for (int i = 0; i < n; i++)
+ result = ((IFn) test.getValue()).invoke(result);
estimatedTime = System.nanoTime() - startTime;
- System.out.println("val:" + result + ", time: " + estimatedTime/1000000);
+ System.out.println("val:" + result + ", time: " + estimatedTime / 1000000);
}