X-Git-Url: http://christophe.rhodes.io/gitweb/?p=specializable.git;a=blobdiff_plain;f=walker.lisp;fp=walker.lisp;h=38484ce7e36e24f773931e0fbfa4683f890febdc;hp=6e75518784f3558bcbcc6e6c723d1bb91fb26641;hb=876c8f807e4e149b6ded2c029f3ddf69ecd1eb8a;hpb=ede4ac2bb5969bbb8a671106368e77acb5a085ac diff --git a/walker.lisp b/walker.lisp index 6e75518..38484ce 100644 --- a/walker.lisp +++ b/walker.lisp @@ -62,9 +62,12 @@ (dolist (form body) (walk form env (cons form call-stack)))))) (defmethod walk ((expr (cons let)) env call-stack) - (with-checked-bindings ((mapcar (lambda (x) (walk (cadr x) env (cons (cadr x) call-stack)) (cons (car x) (make-instance 'binding))) (cadr expr)) env call-stack) - (dolist (form (cddr expr)) - (walk form env (cons form call-stack))))) + (flet ((let-binding (x) + (walk (cadr x) env (cons (cadr x) call-stack)) + (cons (car x) (make-instance 'binding)))) + (with-checked-bindings ((mapcar #'let-binding (cadr expr)) env call-stack) + (dolist (form (cddr expr)) + (walk form env (cons form call-stack)))))) (defun walk/case (expr env call-stack) (typecase expr