Subject: bug#60311: json-available-p: make dynamically correct for Windows

From: Eli Zaretskii <[email-masked]>
Date: Sun, 25 Dec 2022 20:43:11 +0200

> From: Mattias Engdegård <[email-masked]>
> Date: Sun, 25 Dec 2022 15:32:06 +0100
> 
> --- a/lisp/subr.el
> +++ b/lisp/subr.el
> @@ -6905,11 +6905,11 @@ internal--format-docstring-line
>  
>  (defun json-available-p ()
>    "Return non-nil if Emacs has libjansson support."
> -  (and (fboundp 'json-serialize)
> -       (condition-case nil
> -           (json-serialize t)
> -         (:success t)
> -         (json-unavailable nil))))
> +  (declare (side-effect-free error-free))
> +  (and (eval-when-compile (fboundp 'json-serialize))
> +       ;; If `json--available-p' is present, we need to call it at run-time.
> +       (or (not (eval-when-compile (fboundp 'json--available-p)))
> +           (json--available-p))))

Btw, I don't understand this use of eval-when-compile here.  Can you
explain why should we care at compile time whether these functions are
fboundp?

IOW, why not just

  (and (fboundp 'json--available-p)
       (json--available-p))

?