diff options
-rw-r--r-- | sb-eval2.lisp | 11 |
1 files 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) |