summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Andreas Benkard <code@mail.matthias.benkard.de>2013-07-20 16:15:13 +0200
committerMatthias Andreas Benkard <code@mail.matthias.benkard.de>2013-07-20 16:15:13 +0200
commit14c1225d33951029bdf29a8aaeaca4750e22b54d (patch)
tree932e177d2a1ef10df5672bf60a283886dc123f44
parente212a7b4f141304316f4fb7df0bc16cf408a90f2 (diff)
LET, MULTIPLE-VALUE-BIND, LAMBDA: Add declared specials to body context.
-rw-r--r--sb-eval2.lisp12
1 files changed, 9 insertions, 3 deletions
diff --git a/sb-eval2.lisp b/sb-eval2.lisp
index d69b817..d728638 100644
--- a/sb-eval2.lisp
+++ b/sb-eval2.lisp
@@ -495,7 +495,8 @@
(maybe-closes-over-p context `(progn ,@body) argvars)
(some (lambda (x) (maybe-closes-over-p context x argvars))
default-values)))
- (body* (prepare-progn body new-context))
+ (body* (prepare-progn body
+ (context-add-specials new-context specials)))
(unbound (gensym)))
(setq varspecs (nreverse varspecs))
(flet
@@ -843,7 +844,10 @@
else
collect (cons nil val*)
and do (context-add-env-lexical! new-context var)))
- (body* (prepare-progn body new-context)))
+ (body* (prepare-progn body
+ (context-add-specials
+ new-context
+ specials))))
(if envp
(lambda (env)
(let ((new-env (make-environment env varnum))
@@ -963,7 +967,9 @@
(with-parsed-body (body specials) exprs
(let* ((value-form* (prepare-form value-form context))
(n (length (the list vars)))
- (new-context (context-add-env-lexicals context vars))
+ (new-context (context-add-specials
+ (context-add-env-lexicals context vars)
+ specials))
(body* (prepare-progn body new-context)))
(lambda (env)
(let* ((new-env (make-environment env n))