diff options
author | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2013-07-20 16:15:13 +0200 |
---|---|---|
committer | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2013-07-20 16:15:13 +0200 |
commit | 14c1225d33951029bdf29a8aaeaca4750e22b54d (patch) | |
tree | 932e177d2a1ef10df5672bf60a283886dc123f44 | |
parent | e212a7b4f141304316f4fb7df0bc16cf408a90f2 (diff) |
LET, MULTIPLE-VALUE-BIND, LAMBDA: Add declared specials to body context.
-rw-r--r-- | sb-eval2.lisp | 12 |
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)) |