1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-20 19:50:24 +02:00

more lexical declarations

* module/language/elisp/boot.el (condition-case, catch): Add `lexical'
  declarations in macro expansions.
This commit is contained in:
BT Templeton 2011-08-14 16:42:37 -04:00
parent 85b3dd6cc2
commit b07a74497a

View file

@ -442,11 +442,14 @@
'elisp-condition 'elisp-condition
#'(lambda () ,bodyform) #'(lambda () ,bodyform)
#'(lambda (,key ,error-symbol ,data) #'(lambda (,key ,error-symbol ,data)
(declare (lexical ,key ,error-symbol ,data))
(let ((,conditions (let ((,conditions
(get ,error-symbol 'error-conditions)) (get ,error-symbol 'error-conditions))
,@(if var ,@(if var
`((,var (cons ,error-symbol ,data))) `((,var (cons ,error-symbol ,data)))
'())) '()))
(declare (lexical ,conditions
,@(if var `(,var) '())))
(cond ,@(mapcar #'handler->cond-clause handlers) (cond ,@(mapcar #'handler->cond-clause handlers)
(t (signal ,error-symbol ,data))))))))) (t (signal ,error-symbol ,data)))))))))
@ -463,11 +466,13 @@
(c (make-symbol "c")) (c (make-symbol "c"))
(data (make-symbol "data"))) (data (make-symbol "data")))
`(let ((,tag-value ,tag)) `(let ((,tag-value ,tag))
(declare (lexical ,tag-value))
(condition-case ,c (condition-case ,c
(let ((%catch t)) (let ((%catch t))
,@body) ,@body)
(throw (throw
(let ((,data (cdr ,c))) (let ((,data (cdr ,c)))
(declare (lexical ,data))
(if (eq (car ,data) ,tag-value) (if (eq (car ,data) ,tag-value)
(car (cdr ,data)) (car (cdr ,data))
(apply #'throw ,data)))))))) (apply #'throw ,data))))))))