From e325a30b7b3e68e461c75f5ce7f10cb7f7dd4412 Mon Sep 17 00:00:00 2001 From: Sami Samhuri Date: Sun, 24 Apr 2011 12:14:31 -0700 Subject: [PATCH] consolidate arg checks in apply --- src/eval.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/eval.c b/src/eval.c index 1181ca9..9f03385 100644 --- a/src/eval.c +++ b/src/eval.c @@ -346,10 +346,14 @@ LakeVal *apply(LakeCtx *ctx, LakeVal *fnVal, LakeList *args) /* Check # of params */ size_t nparams = LIST_N(fn->params); - if (nparams != LIST_N(args) && !fn->varargs) { + if (!fn->varargs && LIST_N(args) != nparams) { ERR("expected %zu params but got %zu", nparams, LIST_N(args)); return NULL; } + else if (fn->varargs && LIST_N(args) < nparams) { + ERR("expected at least %zu params but got %zu", nparams, LIST_N(args)); + return NULL; + } Env *env = env_make(fn->closure); @@ -361,10 +365,6 @@ LakeVal *apply(LakeCtx *ctx, LakeVal *fnVal, LakeList *args) /* bind varargs */ if (fn->varargs) { - if (LIST_N(args) < nparams) { - ERR("expected at least %zu params but got %zu", nparams, LIST_N(args)); - return NULL; - } LakeList *remainingArgs = list_make_with_capacity(LIST_N(args) - nparams); for (; i < LIST_N(args); ++i) { list_append(remainingArgs, LIST_VAL(args, i));