more lexical declarations
authorBT Templeton <bpt@hcoop.net>
Sun, 14 Aug 2011 20:42:37 +0000 (16:42 -0400)
committerBT Templeton <bpt@hcoop.net>
Fri, 3 Feb 2012 23:53:50 +0000 (18:53 -0500)
* module/language/elisp/boot.el (condition-case, catch): Add `lexical'
  declarations in macro expansions.

module/language/elisp/boot.el

index 3e0a748..db3267c 100644 (file)
                 'elisp-condition
                 #'(lambda () ,bodyform)
                 #'(lambda (,key ,error-symbol ,data)
+                    (declare (lexical ,key ,error-symbol ,data))
                     (let ((,conditions
                            (get ,error-symbol 'error-conditions))
                           ,@(if var
                                 `((,var (cons ,error-symbol ,data)))
                               '()))
+                      (declare (lexical ,conditions
+                                        ,@(if var `(,var) '())))
                       (cond ,@(mapcar #'handler->cond-clause handlers)
                             (t (signal ,error-symbol ,data)))))))))
 
         (c (make-symbol "c"))
         (data (make-symbol "data")))
     `(let ((,tag-value ,tag))
+       (declare (lexical ,tag-value))
        (condition-case ,c
            (let ((%catch t))
              ,@body)
          (throw
           (let ((,data (cdr ,c)))
+            (declare (lexical ,data))
             (if (eq (car ,data) ,tag-value)
                 (car (cdr ,data))
               (apply #'throw ,data))))))))