--- Begin Message ---
Subject: |
24.3.50; eval-and-compile in macro inhibits let-binding of variable |
Date: |
Mon, 25 Feb 2013 17:58:41 +0100 |
Recipe:
* Create a file test.el with the following contents:
(defvar myflag nil)
(defmacro mytestmacro ()
"An eval-and-compile test."
`(eval-and-compile (mytestfun)))
(defun mytestfun ()
(when myflag
(message "foo")))
(let ((myflag t))
;; Should display "foo"
(mytestmacro))
* Now call with Emacs from trunk:
emacs --batch -l test.el
* "foo" should be displayed, but isn't. The Emacs 24.2.93 pretest
however works as expected.
* Note the following:
- It works if you just 'setq' the 'myflag' variable
- If you load the file interactively and call `eval-buffer', it will
also output nothing. However, if you manually evaluate the last
expression through C-x C-e, it will work.
- The same problem occurs with `eval-when-compile', but everything
works with `progn'.
Best,
David "who will never grasp eval-and-compile"
And yes, Stefan, this bug turned up in the EIEIO test suite. :-)
--- End Message ---
--- Begin Message ---
Subject: |
Re: bug#13813: 24.3.50; eval-and-compile in macro inhibits let-binding of variable |
Date: |
Mon, 11 Mar 2013 22:48:11 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux) |
tags 13813 notabug
thanks
> So in yet other words, you don't see this as a bug? If so, then please
> close this report and I'll have to discuss with Eric how we deal with
> this on our side.
Right: the `eval-and-compile' can cause the wrapped code to be run
outside of the scope of the surrounding code, so it's normal if that
let-binding doesn't always have the effect you want.
Stefan
--- End Message ---