diff options
author | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2013-07-11 15:13:24 +0200 |
---|---|---|
committer | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2013-07-11 15:13:24 +0200 |
commit | 7ac0e00597710f13510ed0ea3923422e1bb14239 (patch) | |
tree | d4f9a499a2950ea886f52c5c5499198f3d514d1a | |
parent | 735d4c03e305dc4a962231cc01cbd7736c954434 (diff) |
Fix problems with IF, SB-INT:NAMED-LAMBDA, LOCALLY, DECLARE.
-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) |