]> git.eshelyaron.com Git - emacs.git/commitdiff
New conditional compilation macro static-if.
authorAlan Mackenzie <acm@muc.de>
Sun, 3 Sep 2023 12:54:47 +0000 (12:54 +0000)
committerAlan Mackenzie <acm@muc.de>
Sun, 3 Sep 2023 12:54:47 +0000 (12:54 +0000)
* etc/NEWS: Record the new macro.

* lisp/subr.el (static-if): New macro.

etc/NEWS
lisp/subr.el

index 15cc6cc47e04f754b474f67f4b014e32216d7097..bbf4b67fe34c32cad2e08703700e599b1194b0f8 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -55,7 +55,7 @@ the signature) the automatically inferred function type as well.
 ---
 ** New user option 'describe-bindings-outline-rules'.
 This user option controls outline visibility in the output buffer of
-'describe-bindings' when 'describe-bindings-outline' in non-nil.
+'describe-bindings' when 'describe-bindings-outline' is non-nil.
 
 ** X selection requests are now handled much faster and asynchronously.
 This means it should be less necessary to disable the likes of
@@ -861,6 +861,12 @@ Use 'define-minor-mode' and 'define-globalized-minor-mode' instead.
 See the "(elisp) Porting Old Advice" node for help converting them
 to use 'advice-add' or 'define-advice' instead.
 
++++
+** New macro 'static-if' for conditional compilation of code.
+This macro hides a form from the compiler based on a compile-time
+condition.  This is handy for avoiding byte-compilation warnings about
+code that will never actually run under some conditions.
+
 +++
 ** Desktop notifications are now supported on the Haiku operating system.
 The new function 'haiku-notifications-notify' provides a subset of the
index 0894a644d28d5c66f167f4370bc02e8125301610..34d87e83310c902cfa766cb3ce14b91635b3b486 100644 (file)
@@ -277,6 +277,21 @@ change the list."
          (macroexp-let2 macroexp-copyable-p x getter
            `(prog1 ,x ,(funcall setter `(cdr ,x))))))))
 
+;; Note: `static-if' can be copied into a package to enable it to be
+;; used in Emacsen older than Emacs 30.1.  If the package is used in
+;; very old Emacsen or XEmacs (in which `eval' takes exactly one
+;; argument) the copy will need amending.
+(defmacro static-if (condition then-form &rest else-forms)
+  "A conditional compilation macro.
+Evaluate CONDITION at macro-expansion time.  If it is non-nil,
+expand the macro to THEN-FORM.  Otherwise expand it to ELSE-FORMS
+enclosed in a `progn' form.  ELSE-FORMS may be empty."
+  (declare (indent 2)
+           (debug (sexp sexp &rest sexp)))
+  (if (eval condition lexical-binding)
+      then-form
+    (cons 'progn else-forms)))
+
 (defmacro when (cond &rest body)
   "If COND yields non-nil, do BODY, else return nil.
 When COND yields non-nil, eval BODY forms sequentially and return