]> git.eshelyaron.com Git - emacs.git/commitdiff
Elide broken but unnecessary `if` optimisations
authorMattias Engdegård <mattiase@acm.org>
Fri, 16 Dec 2022 14:56:04 +0000 (15:56 +0100)
committerMattias Engdegård <mattiase@acm.org>
Fri, 16 Dec 2022 16:17:23 +0000 (17:17 +0100)
* lisp/emacs-lisp/byte-opt.el (byte-optimize-if):
Remove explicit clauses purposing to simplify

    (if X nil t) -> (not X)
    (if X t nil) -> (not (not X))

but never did so because of a coding mistake (eq instead of equal),
found by a recently added warning.  They weren't actually needed
thanks to the optimiser's fixpoint iteration: we eventually get the
same results through

    (if X nil t) -> (if (not X) t nil) -> (if (not X) t) -> (not X)
    (if X t nil) -> (if X t) -> (not (not X))

lisp/emacs-lisp/byte-opt.el

index a7e1df3622d0bf824d0c851f18f7b01dfea5407b..0da2a9b882dade73dfe7ead1ecf696bc4e2de84e 100644 (file)
@@ -1297,11 +1297,8 @@ See Info node `(elisp) Integer Basics'."
       (if else
           `(progn ,condition ,@else)
         condition))
-     ;; (if X nil t) -> (not X)
-     ((and (eq then nil) (eq else '(t)))
-      `(not ,condition))
-     ;; (if X t [nil]) -> (not (not X))
-     ((and (eq then t) (or (null else) (eq else '(nil))))
+     ;; (if X t) -> (not (not X))
+     ((and (eq then t) (null else))
       `(not ,(byte-opt--negate condition)))
      ;; (if VAR VAR X...) -> (or VAR (progn X...))
      ((and (symbolp condition) (eq condition then))