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
npostavs <at> users.sourceforge.net writes:
> Michael Heerdegen <michael_heerdegen <at> web.de> writes:
>
> > Sure, but that's something different. I didn't want a special variable
> > in my example. The doc of `cl-progv' doesn't mention that the symbols
> > must correspond to special variables. Do I miss something?
>
> Oh, you expect cl-progv to bind lexically?
Eh - no. Maybe I have a wrong mental model. I thought that the free
variable `x' in the lambda is (also) in the scope of the dynamical
binding created by `progv', and because that binding is established
inside the `let' establishing the lexical binding of `x', it would
shadow the lexical binding.
Why does the lambda still refer to the lexical binding?
FWIW I see that this example shows the same behavior:
#+begin_src emacs-lisp
(setq x 'foo)
(let ((x 0))
(cl-letf (((symbol-value 'x) 1))
(funcall (lambda () x))))
#+end_src
==> 0
Does a lexical binding always beat a dynamical one?
Michael.
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.