summaryrefslogtreecommitdiff
path: root/src/cli/runtime/AFn.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/cli/runtime/AFn.cs')
-rw-r--r--src/cli/runtime/AFn.cs35
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");
}