GNU bug report logs -
#27674
26.0.50; cl-progv: strange scoping due to implementation
Previous Next
Reported by: Michael Heerdegen <michael_heerdegen <at> web.de>
Date: Wed, 12 Jul 2017 21:54:02 UTC
Severity: normal
Tags: notabug, wontfix
Found in version 26.0.50
Done: npostavs <at> users.sourceforge.net
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
Michael Heerdegen <michael_heerdegen <at> web.de> writes:
> The way `cl-progv' is implemented, we have some strange effects
> happening to closures in the body. For example, with lexical-binding
> on,
>
> (let ((x 0))
> (cl-progv (list 'x) (list 1)
> (funcall (lambda () x))))
>
> yields 0, and
>
> (cl-progv (list 'x) (list 1)
> (funcall (lambda () x)))
>
> yields 1. That isn't consistent (FWIW I would expect `1' in both
> cases).
IMO, this is a bug in your program, this yields 1:
(progn
(defvar x)
(let ((x 0))
(cl-progv (list 'x) (list 1)
(funcall (lambda () x)))))
Note that your second expression gives a compile warning (it's also
missing a defvar, though it happens to give the result you expect even
without that):
27674.el:10:25:Warning: reference to free variable ‘x’
This bug report was last modified 8 years and 1 day ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.