# HG changeset patch # User Chong Yidong # Date 1163884037 0 # Node ID 3fd4ab1021bde72b8584a4261b2b15938cfa97cd # Parent 36520481d28f3b316aaf93fe744d25528ec7ad3f (byte-compile-maybe-guarded): Check `and' conditions for function or variable bindings. diff -r 36520481d28f -r 3fd4ab1021bd lisp/emacs-lisp/bytecomp.el --- 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)))