diff options
| -rw-r--r-- | sb-eval2.lisp | 12 | 
1 files changed, 8 insertions, 4 deletions
diff --git a/sb-eval2.lisp b/sb-eval2.lisp index 7be5627..b68591e 100644 --- a/sb-eval2.lisp +++ b/sb-eval2.lisp @@ -307,10 +307,14 @@  (declaim (ftype (function (list context) eval-closure) prepare-progn))  (defun prepare-progn (forms context)    (let ((body* (mapcar (lambda (form) (prepare-form form context)) forms))) -    (lambda (env) -      (let (result) -        (dolist (form* body* result) -          (setq result (funcall (the eval-closure form*) env))))))) +    (if (null body*) +        (prepare-nil) +        (let ((forms* (butlast body*)) +              (last-form* (first (last body*)))) +          (lambda (env) +            (dolist (form* forms*) +              (funcall (funcall (the eval-closure form*) env))) +            (funcall (the eval-closure last-form*) env))))))  (defun lambda-binding-vars (entry)    (etypecase entry  | 
