Mercurial > emacs
changeset 74061:3fd4ab1021bd
(byte-compile-maybe-guarded): Check `and' conditions for function or
variable bindings.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Sat, 18 Nov 2006 21:07:17 +0000 |
parents | 36520481d28f |
children | 7febd926d4ff |
files | lisp/emacs-lisp/bytecomp.el |
diffstat | 1 files changed, 31 insertions(+), 24 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/emacs-lisp/bytecomp.el Sat Nov 18 21:07:01 2006 +0000 +++ b/lisp/emacs-lisp/bytecomp.el Sat Nov 18 21:07:17 2006 +0000 @@ -3398,35 +3398,42 @@ If CONDITION's value is (not (featurep 'emacs)) or (featurep 'xemacs), that suppresses all warnings during execution of BODY." (declare (indent 1) (debug t)) - `(let* ((fbound - (if (eq 'fboundp (car-safe ,condition)) - (and (eq 'quote (car-safe (nth 1 ,condition))) - ;; Ignore if the symbol is already on the - ;; unresolved list. - (not (assq (nth 1 (nth 1 ,condition)) ; the relevant symbol - byte-compile-unresolved-functions)) - (nth 1 (nth 1 ,condition))))) - (bound (if (or (eq 'boundp (car-safe ,condition)) - (eq 'default-boundp (car-safe ,condition))) - (and (eq 'quote (car-safe (nth 1 ,condition))) - (nth 1 (nth 1 ,condition))))) - ;; Maybe add to the bound list. - (byte-compile-bound-variables - (if bound - (cons bound byte-compile-bound-variables) - byte-compile-bound-variables)) - ;; Suppress all warnings, for code not used in Emacs. - (byte-compile-warnings + `(let* ((byte-compile-warnings + ;; Suppress all warnings, for code not used in Emacs. (if (member ,condition '((featurep 'xemacs) (not (featurep 'emacs)))) - nil byte-compile-warnings))) + nil + byte-compile-warnings)) + (byte-compile-bound-variables byte-compile-bound-variables) + binding fbound-list) + (mapc (lambda (subcondition) + (cond ((eq 'fboundp (car-safe subcondition)) + (setq binding (and (eq 'quote (car-safe (nth 1 subcondition))) + ;; Ignore if the symbol is already on the + ;; unresolved list. + (not (assq (nth 1 (nth 1 subcondition)) + byte-compile-unresolved-functions)) + (nth 1 (nth 1 subcondition)))) + (if binding (setq fbound-list (cons binding fbound-list)))) + ((or (eq 'boundp (car-safe subcondition)) + (eq 'default-boundp (car-safe subcondition))) + (setq binding (and (eq 'quote (car-safe (nth 1 subcondition))) + (nth 1 (nth 1 subcondition)))) + (if binding (setq byte-compile-bound-variables + (cons binding byte-compile-bound-variables)))))) + ;; Inspect each element in an `and' condition; otherwise, + ;; inspect the condition itself. + (if (eq 'and (car-safe ,condition)) + (cdr ,condition) + (list ,condition))) (unwind-protect (progn ,@body) ;; Maybe remove the function symbol from the unresolved list. - (if fbound - (setq byte-compile-unresolved-functions - (delq (assq fbound byte-compile-unresolved-functions) - byte-compile-unresolved-functions)))))) + (mapc (lambda (fun) + (setq byte-compile-unresolved-functions + (delq (assq fun byte-compile-unresolved-functions) + byte-compile-unresolved-functions))) + fbound-list)))) (defun byte-compile-if (form) (byte-compile-form (car (cdr form)))