GNU bug report logs -
#66940
Dynamic scoping is all weird now?
Previous Next
Reported by: Dave Goel <deego3 <at> gmail.com>
Date: Sun, 5 Nov 2023 04:08:02 UTC
Severity: normal
Tags: notabug
Done: Michael Heerdegen <michael_heerdegen <at> web.de>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
I was playing around, checking my sanity re : dynamic scoping. I'm
probably rusty, but I could swear that on older emacsen, this sort of code
would print 33 ten times.
On emacs -Q with debian stable (28.2).
I try this
(progn
(setq lexical-binding nil)
(dotimes (ii 10)
(defmacro mac ()
`(message "%S" ,ii)
(sit-for 0.1))
(let ((old_ii ii))
(setq ii 33)
(mac)
(setq ii old_ii)
)))
Exits without error the first two times, although, strangely, i don't see
any messages the second time. (I expected to see ten 33's).
*(a) As in, the second time, it doesn't print 33 ten times, as we would
expect.*
*(b) The third time is stranger. *
Let's evaluate it a third time! The third time is even weirder.
The third time, it complains
Debugger entered--Lisp error: (void-variable ii)
(list 'message "%S" ii)
(lambda nil (list 'message "%S" ii) (list 'print ii) (sit-for 0.1))()
macroexpand((mac) nil)
macroexp-macroexpand((mac) nil)
macroexp--expand-all((mac))
macroexp--all-forms(((setq ii 33) (mac) (setq ii old_ii)))
macroexp--expand-all((let ((old_ii ii)) (setq ii 33) (mac) (setq ii
old_ii)))
and so on.
The bug(?) was reproduced on 29.1 as well - by e1f on #emacs
*(c) It gets even funnier. e1f changed ii to var, but the third time, it
still complained about ii, with the above error message, and not about var.*
I reproduced that as well.
Dave
[Message part 2 (text/html, inline)]
This bug report was last modified 1 year and 199 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.