summaryrefslogtreecommitdiff
path: root/src/cli/runtime/RestFn2.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/cli/runtime/RestFn2.cs')
-rw-r--r--src/cli/runtime/RestFn2.cs24
1 files changed, 17 insertions, 7 deletions
diff --git a/src/cli/runtime/RestFn2.cs b/src/cli/runtime/RestFn2.cs
index 8cfe865e..bc528dfa 100644
--- a/src/cli/runtime/RestFn2.cs
+++ b/src/cli/runtime/RestFn2.cs
@@ -20,13 +20,23 @@ public abstract class RestFn2 : AFn{
public abstract Object doInvoke(ThreadLocalData tld, Object arg1, Object arg2, Cons rest) /*throws Exception*/;
override public Object applyTo(ThreadLocalData tld, Cons arglist) /*throws Exception*/
- {
- if(RT.boundedLength(arglist, 2) < 2)
- throwArity();
- return doInvoke(tld, arglist.first
- , (arglist = arglist.rest).first
- , arglist.rest);
-
+ {
+ switch (RT.boundedLength(arglist, 2))
+ {
+ case 0:
+ return invoke(tld);
+ case 1:
+ return invoke(tld, arglist.first);
+ case 2:
+ return invoke(tld, arglist.first
+ , (arglist = arglist.rest).first
+ );
+ default:
+ return doInvoke(tld, arglist.first
+ , (arglist = arglist.rest).first
+ , arglist.rest);
+
+ }
}
override public Object invoke(ThreadLocalData tld, Object arg1, Object arg2) /*throws Exception*/