From 7ac0e00597710f13510ed0ea3923422e1bb14239 Mon Sep 17 00:00:00 2001 From: Matthias Andreas Benkard Date: Thu, 11 Jul 2013 15:13:24 +0200 Subject: Fix problems with IF, SB-INT:NAMED-LAMBDA, LOCALLY, DECLARE. --- sb-eval2.lisp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/sb-eval2.lisp b/sb-eval2.lisp index 0925998..3e080ee 100644 --- a/sb-eval2.lisp +++ b/sb-eval2.lisp @@ -138,7 +138,7 @@ (cons (case (first form) ((if) - (destructuring-bind (a b c) (rest form) + (destructuring-bind (a b &optional c) (rest form) (let ((a* (prepare-form a context)) (b* (prepare-form b context)) (c* (prepare-form c context))) @@ -152,6 +152,8 @@ (ecase (first fun-form) ((lambda) (prepare-lambda (rest fun-form) context)) + ((sb-int:named-lambda) + (prepare-lambda (cddr fun-form) context)) ((setf (prepare-function-ref fun-form context)))))))) ((lambda) @@ -182,7 +184,7 @@ (funcall body* env)))))) ((declare) ;;FIXME - (lambda (env) (declare (ignore env)) nil)) + (prepare-nil)) ((eval-when) (destructuring-bind ((&rest times) &body body) (rest form) (if (or (member :load-toplevel times) @@ -253,7 +255,8 @@ (push `(,var . ,val) (environment-variables new-env)) (funcall more new-env)))))))) (prepare-let* bindings context)))) - ((locally)) + ((locally) + (prepare-nil)) ((multiple-value-call) (destructuring-bind (f &rest argforms) (rest form) (let ((f* (prepare-form f context)) @@ -328,7 +331,7 @@ ((sb-ext:truly-the) (prepare-form (third form) context)) ((sb-int:named-lambda) - (prepare-lambda (rest form) context)) + (prepare-lambda (cddr form) context)) ((symbol-macrolet) (destructuring-bind (bindings &rest body) (rest form) (let ((bindings (mapcar (lambda (form) -- cgit v1.2.3