From: Mattias EngdegÄrd Date: Fri, 16 Dec 2022 14:56:04 +0000 (+0100) Subject: Elide broken but unnecessary `if` optimisations X-Git-Tag: emacs-29.0.90~1122 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=13aa376e93564a8cf2ddbbcf0968c6666620db89;p=emacs.git 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)) --- diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el index a7e1df3622d..0da2a9b882d 100644 --- a/lisp/emacs-lisp/byte-opt.el +++ b/lisp/emacs-lisp/byte-opt.el @@ -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))