diff options
author | Rich Hickey <richhickey@gmail.com> | 2006-08-01 20:24:20 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2006-08-01 20:24:20 +0000 |
commit | df7b30a6c1dfd253d63786ed8277ab43329a11dd (patch) | |
tree | 70ea16a477be769f5867b1646ce61da4e8fbee9f /src/jvm/clojure | |
parent | 0c422d65c6dc16d9e2887695ee5f6fa3e07fe617 (diff) |
changed max arity to 20
Diffstat (limited to 'src/jvm/clojure')
-rw-r--r-- | src/jvm/clojure/lang/AFn.java | 503 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Accessor.java | 179 | ||||
-rw-r--r-- | src/jvm/clojure/lang/ArraySeq.java | 14 | ||||
-rw-r--r-- | src/jvm/clojure/lang/IFn.java | 64 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Keyword.java | 164 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Reflector.java | 32 | ||||
-rw-r--r-- | src/jvm/clojure/lang/RestFn.java | 214 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Var.java | 119 |
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); } |