summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sb-eval2.lisp31
1 files changed, 16 insertions, 15 deletions
diff --git a/sb-eval2.lisp b/sb-eval2.lisp
index e79a174..b5fcf0c 100644
--- a/sb-eval2.lisp
+++ b/sb-eval2.lisp
@@ -278,9 +278,11 @@
(env-lexical
(lambda (env)
(environment-value env nesting offset)))))
- (lambda (env)
- (declare (ignore env))
- (symbol-value var))))
+ (progn
+ (assume-special context var)
+ (lambda (env)
+ (declare (ignore env))
+ (symbol-value var)))))
(defun body-decls&forms (exprs)
@@ -540,7 +542,7 @@
(setq varspecs (nreverse varspecs))
(flet
((handle-arguments (new-env &rest args)
- ;;(declare (dynamic-extent args))
+ (declare (dynamic-extent args))
;; All this ELT and LENGTH stuff is not as
;; inefficient as it looks. SBCL transforms
;; &rest into &more here.
@@ -787,17 +789,16 @@
(loop for (var info val*) on bindings by #'cdddr
for value = (funcall (the eval-closure val*) env)
for result =
- (progn
- (etypecase info
- (function ;symbol macro setter
- (funcall info env))
- (lexical
- (setf (environment-value env
- (lexical-nesting info)
- (lexical-offset info))
- value))
- (keyword
- (setf (symbol-value var) value))))
+ (etypecase info
+ (function ;symbol macro setter
+ (funcall info env))
+ (lexical
+ (setf (environment-value env
+ (lexical-nesting info)
+ (lexical-offset info))
+ value))
+ (keyword
+ (setf (symbol-value var) value)))
finally (return result))))))
((catch)
(destructuring-bind (tag &body body) (rest form)