]> git.eshelyaron.com Git - emacs.git/commit
Fix command repetition with lexical-binding (Bug#29334)
authorNoam Postavsky <npostavs@gmail.com>
Fri, 24 Nov 2017 02:57:09 +0000 (21:57 -0500)
committerNoam Postavsky <npostavs@gmail.com>
Thu, 4 Jan 2018 01:51:28 +0000 (20:51 -0500)
commitce48658191befb7734a7af484e368af5ed8b9447
treeb5d6988b30ce6fb135ec36abc9fb113596b9f40a
parentf8b4e87d5d4f57954b50677add76ce5136211dc1
Fix command repetition with lexical-binding (Bug#29334)

`call-interactively' relies on analyzing the source of `interactive'
forms in order to preserve arguments like (region-end) in the command
history, rather than just storing the resulting position.  However,
the byte-compiler does not preserve the source of the interactive form
when lexical-binding is in effect, because `call-interactively' would
evaluate the form with dynamic binding in that case.

To fix this, change `call-interactively' so that it checks compiled
functions for lexical-binding as well.  Then the byte-compiler can
preserve the source of interactive forms regardless of the value of
lexical-binding.

* src/callint.c (Fcall_interactively): Functions compiled with
lexical-binding have their arglist encoded as an integer, use this to
choose the right kind of binding for compiled functions too.
* lisp/emacs-lisp/bytecomp.el (byte-compile-lambda): Preserve the
uncompiled form of the interactive form when lexical-binding is
enabled too.
lisp/emacs-lisp/bytecomp.el
src/callint.c