emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 6283b92334 2/3: Elide broken but unnecessary `if` optimisations


From: Mattias Engdegård
Subject: master 6283b92334 2/3: Elide broken but unnecessary `if` optimisations
Date: Fri, 16 Dec 2022 14:18:42 -0500 (EST)

branch: master
commit 6283b9233459d74f95e9b0300f025a49f9674fb9
Author: Mattias Engdegård <mattiase@acm.org>
Commit: Mattias Engdegård <mattiase@acm.org>

    Elide broken but unnecessary `if` optimisations
    
    * 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 | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el
index 55b68c5843..898dfffef6 100644
--- a/lisp/emacs-lisp/byte-opt.el
+++ b/lisp/emacs-lisp/byte-opt.el
@@ -1298,11 +1298,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))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]