diff options
| author | Rich Hickey <richhickey@gmail.com> | 2006-05-23 18:12:54 +0000 |
|---|---|---|
| committer | Rich Hickey <richhickey@gmail.com> | 2006-05-23 18:12:54 +0000 |
| commit | 8800e169cf12df893fdd89c8e93edb36f8e5388e (patch) | |
| tree | 0b7c32db9b7e4e2d3e7951a5b066220ac9d5ba22 /src/cli/runtime/AFn.cs | |
| parent | 7b16ded965dfa76689d0235d4f1cf999a3f1c8a5 (diff) | |
derived Keyword from Symbol, IFn
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"); } |
