diff options
-rw-r--r-- | stdlib/compiler.tl | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/stdlib/compiler.tl b/stdlib/compiler.tl index b6d9de2f..b1d69db2 100644 --- a/stdlib/compiler.tl +++ b/stdlib/compiler.tl @@ -2232,17 +2232,17 @@ (fix-vals (mapcar (ret (gensym)) fix-arg-exprs)) (fix-arg-iter fix-arg-exprs) (check-opts) - (ign-1 (gensym)) - (ign-2 (gensym)) + (ign (gensym)) (al-val (gensym)) (shadow-p (let ((all-vars (append pars.req pars.(opt-syms) (if pars.rest (list pars.rest))))) (or (isecp all-vars fix-arg-iter) (member apply-list-expr all-vars))))) - (rlcp ^(,(if shadow-p 'let 'alet) ,(zip fix-vals fix-arg-iter) + (rlcp ^(,(if shadow-p 'let 'alet) (,*(zip fix-vals fix-arg-iter) + (,ign nil) + ,*(if apply-list-expr + ^((,al-val ,apply-list-expr)))) (let* ,(build - (if apply-list-expr - (add ^(,al-val ,apply-list-expr))) (while (and fix-vals pars.req) (add ^(,(pop pars.req) ,(pop fix-vals))) (pop fix-arg-iter)) @@ -2273,14 +2273,14 @@ (pars.rest (add ^(,pars.rest nil))) (apply-list-expr - (add ^(,ign-2 (if ,al-val - (lambda-excess-apply-list)))))))) + (add ^(,ign (if ,al-val + (lambda-excess-apply-list)))))))) ((and fix-vals apply-list-expr) (lambda-too-many-args lm-expr)) (apply-list-expr (when pars.req - (add ^(,ign-1 (if (< (len ,al-val) ,(len pars.req)) - (lambda-short-apply-list))))) + (add ^(,ign (if (< (len ,al-val) ,(len pars.req)) + (lambda-short-apply-list))))) (while pars.req (add ^(,(pop pars.req) (pop ,al-val)))) (while pars.opt @@ -2299,8 +2299,8 @@ (push (list* var-sym have-sym init-form) check-opts))) (if pars.rest (add ^(,pars.rest ,al-val)) - (add ^(,ign-2 (if ,al-val - (lambda-excess-apply-list)))))) + (add ^(,ign (if ,al-val + (lambda-excess-apply-list)))))) (pars.req (lambda-too-few-args lm-expr)) (pars.opt |