summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Andreas Benkard <code@mail.matthias.benkard.de>2013-07-11 15:13:24 +0200
committerMatthias Andreas Benkard <code@mail.matthias.benkard.de>2013-07-11 15:13:24 +0200
commit7ac0e00597710f13510ed0ea3923422e1bb14239 (patch)
treed4f9a499a2950ea886f52c5c5499198f3d514d1a
parent735d4c03e305dc4a962231cc01cbd7736c954434 (diff)
Fix problems with IF, SB-INT:NAMED-LAMBDA, LOCALLY, DECLARE.
-rw-r--r--sb-eval2.lisp11
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)