(byte-compile-maybe-guarded): Check `and' conditions for function or
variable bindings.
This commit is contained in:
parent
f80832bcaa
commit
26cc7ed550
1 changed files with 31 additions and 24 deletions
|
@ -3398,35 +3398,42 @@ being undefined will be suppressed.
|
||||||
If CONDITION's value is (not (featurep 'emacs)) or (featurep 'xemacs),
|
If CONDITION's value is (not (featurep 'emacs)) or (featurep 'xemacs),
|
||||||
that suppresses all warnings during execution of BODY."
|
that suppresses all warnings during execution of BODY."
|
||||||
(declare (indent 1) (debug t))
|
(declare (indent 1) (debug t))
|
||||||
`(let* ((fbound
|
`(let* ((byte-compile-warnings
|
||||||
(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.
|
;; Suppress all warnings, for code not used in Emacs.
|
||||||
(byte-compile-warnings
|
|
||||||
(if (member ,condition '((featurep 'xemacs)
|
(if (member ,condition '((featurep 'xemacs)
|
||||||
(not (featurep 'emacs))))
|
(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
|
(unwind-protect
|
||||||
(progn ,@body)
|
(progn ,@body)
|
||||||
;; Maybe remove the function symbol from the unresolved list.
|
;; Maybe remove the function symbol from the unresolved list.
|
||||||
(if fbound
|
(mapc (lambda (fun)
|
||||||
(setq byte-compile-unresolved-functions
|
(setq byte-compile-unresolved-functions
|
||||||
(delq (assq fbound byte-compile-unresolved-functions)
|
(delq (assq fun byte-compile-unresolved-functions)
|
||||||
byte-compile-unresolved-functions))))))
|
byte-compile-unresolved-functions)))
|
||||||
|
fbound-list))))
|
||||||
|
|
||||||
(defun byte-compile-if (form)
|
(defun byte-compile-if (form)
|
||||||
(byte-compile-form (car (cdr form)))
|
(byte-compile-form (car (cdr form)))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue