diff options
Diffstat (limited to 'src/cli/runtime/AFn.cs')
-rw-r--r-- | src/cli/runtime/AFn.cs | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/src/cli/runtime/AFn.cs b/src/cli/runtime/AFn.cs index 9b1cb05b..193f4387 100644 --- a/src/cli/runtime/AFn.cs +++ b/src/cli/runtime/AFn.cs @@ -56,37 +56,42 @@ virtual public Object invoke(ThreadLocalData tld, Object arg1, Object arg2, Obje } virtual public Object applyTo(ThreadLocalData tld, Cons arglist) /*throws Exception*/ +{ +return applyToHelper(this,tld,arglist); +} + +static public Object applyToHelper(IFn ifn,ThreadLocalData tld, Cons arglist) /*throws Exception*/ { switch(RT.boundedLength(arglist, 5)) { - case 0: - return invoke(tld); - case 1: - return invoke(tld, arglist.first); - case 2: - return invoke(tld, arglist.first + case 0:
+ return ifn.invoke(tld); + case 1:
+ return ifn.invoke(tld, arglist.first); + case 2:
+ return ifn.invoke(tld, arglist.first , (arglist = arglist.rest).first ); - case 3: - return invoke(tld, arglist.first + case 3:
+ return ifn.invoke(tld, arglist.first , (arglist = arglist.rest).first , (arglist = arglist.rest).first ); - case 4: - return invoke(tld, arglist.first + case 4:
+ return ifn.invoke(tld, arglist.first , (arglist = arglist.rest).first , (arglist = arglist.rest).first , (arglist = arglist.rest).first ); - case 5: - return invoke(tld, arglist.first + case 5:
+ return ifn.invoke(tld, arglist.first , (arglist = arglist.rest).first , (arglist = arglist.rest).first , (arglist = arglist.rest).first , (arglist = arglist.rest).first ); - default: - return invoke(tld, arglist.first + default:
+ return ifn.invoke(tld, arglist.first , (arglist = arglist.rest).first , (arglist = arglist.rest).first , (arglist = arglist.rest).first @@ -95,7 +100,7 @@ virtual public Object applyTo(ThreadLocalData tld, Cons arglist) /*throws Except } } -protected Object throwArity() +static public Object throwArity() { throw new Exception("Wrong number of args passed"); } |