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).
This commit is contained in:
parent
cccd701ac9
commit
0324ec1737
1 changed files with 11 additions and 11 deletions
|
@ -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.
|
||||
|
|
Loading…
Add table
Reference in a new issue