(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),
|
||||
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)))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue