]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix mistake in `quote` optimiser
authorMattias Engdegård <mattiase@acm.org>
Wed, 21 Jul 2021 08:54:43 +0000 (10:54 +0200)
committerMattias Engdegård <mattiase@acm.org>
Wed, 21 Jul 2021 09:17:18 +0000 (11:17 +0200)
Found by Pip Cet.

* lisp/emacs-lisp/byte-opt.el (byte-optimize-quote): Fix mistake that
made this optimiser ineffective at removing quoting of nil, t, and
keywords.  The only obvious consequence is that we no longer need...
(byte-optimize-form): ...a 'nil => nil normalising step here; remove.
(byte-optimize-form-code-walker): Make the compiler warn about (quote).

lisp/emacs-lisp/byte-opt.el

index c9c0ac0045e47dcd00ea32e41e4fcedcc06bf23c..341643c7d16a6bc9863715841ba44f0f9d785d9c 100644 (file)
@@ -414,7 +414,7 @@ Same format as `byte-optimize--lexvars', with shared structure and contents.")
              form)))
         (t form)))
       (`(quote . ,v)
-       (if (cdr v)
+       (if (or (not v) (cdr v))
           (byte-compile-warn "malformed quote form: `%s'"
                              (prin1-to-string form)))
        ;; Map (quote nil) to nil to simplify optimizer logic.
@@ -667,8 +667,7 @@ Same format as `byte-optimize--lexvars', with shared structure and contents.")
                      (byte-compile-log "  %s\t==>\t%s" old new)
                       (setq form new)
                       (not (eq new old))))))))
-  ;; Normalise (quote nil) to nil, for a single representation of constant nil.
-  (and (not (equal form '(quote nil))) form))
+  form)
 
 (defun byte-optimize-let-form (head form for-effect)
   ;; Recursively enter the optimizer for the bindings and body
@@ -1077,7 +1076,7 @@ See Info node `(elisp) Integer Basics'."
 (defun byte-optimize-quote (form)
   (if (or (consp (nth 1 form))
          (and (symbolp (nth 1 form))
-              (not (macroexp--const-symbol-p form))))
+              (not (macroexp--const-symbol-p (nth 1 form)))))
       form
     (nth 1 form)))