From 5f720046783c5b29fad3765303c1ad57aba167ce Mon Sep 17 00:00:00 2001 From: Noam Postavsky Date: Sat, 6 Jan 2018 21:16:33 -0500 Subject: [PATCH] Revert "Fix command repetition with lexical-binding (Bug#29334)" It does not work with more complicated interactive forms, because byte-compile-lambda actually receives an intermediate form of code rather than valid lisp source (Bug#29988). * src/callint.c (Fcall_interactively): * lisp/emacs-lisp/bytecomp.el (byte-compile-lambda): Revert previous change, and update commentary. --- lisp/emacs-lisp/bytecomp.el | 7 ++++++- src/callint.c | 4 +--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index 564aac2fc6a..cc3a24e3d51 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el @@ -2839,7 +2839,12 @@ for symbols generated by the byte compiler itself." (while (consp (cdr form)) (setq form (cdr form))) (setq form (car form))) - (if (eq (car-safe form) 'list) + (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)) nil (setq int `(interactive ,newform))))) ((cdr int) diff --git a/src/callint.c b/src/callint.c index dcda0bcf7a0..c713e08d4d4 100644 --- a/src/callint.c +++ b/src/callint.c @@ -357,9 +357,7 @@ invoke it. If KEYS is omitted or nil, the return value of /* Compute the arg values using the user's expression. */ specs = Feval (specs, CONSP (funval) && EQ (Qclosure, XCAR (funval)) - ? CAR_SAFE (XCDR (funval)) - : COMPILEDP (funval) && INTEGERP (AREF (funval, COMPILED_ARGLIST)) - ? Qt : Qnil); + ? CAR_SAFE (XCDR (funval)) : Qnil); if (events != num_input_events || !NILP (record_flag)) { /* We should record this command on the command history. */ -- 2.39.2