emacs-diffs
[Top][All Lists]
Advanced

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

master 0324ec1: Fix recently introduced bug in `byte-compile-lambda'


From: Lars Ingebrigtsen
Subject: master 0324ec1: Fix recently introduced bug in `byte-compile-lambda'
Date: Wed, 17 Feb 2021 11:12:37 -0500 (EST)

branch: master
commit 0324ec17375028bd1b26a6d695535450d5a5a9c5
Author: Lars Ingebrigtsen <larsi@gnus.org>
Commit: Lars Ingebrigtsen <larsi@gnus.org>

    Fix recently introduced bug in `byte-compile-lambda'
    
    * lisp/emacs-lisp/bytecomp.el (byte-compile-lambda): Fix recently
    introduced error when compiling non-lexical commands (bug#46589).
---
 lisp/emacs-lisp/bytecomp.el | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index 5c6b9c2..9d80afd 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -2951,7 +2951,9 @@ for symbols generated by the byte compiler itself."
       ;; Skip (interactive) if it is in front (the most usual location).
       (if (eq int (car body))
          (setq body (cdr body)))
-      (cond ((consp (cdr int))
+      (cond ((consp (cdr int))       ; There is an `interactive' spec.
+             ;; Check that the bit after the `interactive' spec is
+             ;; just a list of symbols (i.e., modes).
             (unless (seq-every-p #'symbolp (cdr (cdr int)))
               (byte-compile-warn "malformed interactive specc: %s"
                                  (prin1-to-string int)))
@@ -2966,16 +2968,14 @@ for symbols generated by the byte compiler itself."
                 (while (consp (cdr form))
                   (setq form (cdr form)))
                 (setq form (car form)))
-              (setq int
-                    (if (and (eq (car-safe form) 'list)
-                              ;; For code using lexical-binding, form is not
-                              ;; valid lisp, but rather an intermediate form
-                              ;; which may include "calls" to
-                              ;; internal-make-closure (Bug#29988).
-                              (not lexical-binding))
-                         `(interactive ,form)
-                       `(interactive ,newform)))))
-           ((cdr int)
+              (when (or (not (eq (car-safe form) 'list))
+                         ;; For code using lexical-binding, form is not
+                         ;; valid lisp, but rather an intermediate form
+                         ;; which may include "calls" to
+                         ;; internal-make-closure (Bug#29988).
+                         lexical-binding)
+                 (setq int `(interactive ,newform)))))
+            ((cdr int)                  ; Invalid (interactive . something).
             (byte-compile-warn "malformed interactive spec: %s"
                                (prin1-to-string int)))))
     ;; Process the body.



reply via email to

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