Subject: bug#13813: closed (Re: bug#13813: 24.3.50; eval-and-compile in macro inhibits let-binding of variable)

From: [email-masked] (GNU bug Tracking System)
Date: Tue, 12 Mar 2013 02:50:04 +0000

Your bug report

#13813: 24.3.50; eval-and-compile in macro inhibits let-binding of variable

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
13813: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=13813
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#13813: 24.3.50; eval-and-compile in macro inhibits let-binding of variable
From: Stefan Monnier <[email-masked]>
To: [email-masked]
Date: Mon, 11 Mar 2013 22:48:11 -0400
List-Id: <debbugs-submit.debbugs.gnu.org>

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

Subject: 24.3.50; eval-and-compile in macro inhibits let-binding of variable
From: David Engster <[email-masked]>
To: [email-masked]
Date: Mon, 25 Feb 2013 17:58:41 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

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. :-)