GNU bug report logs -
#45619
No warning when pcase-let is binding dynamic variable
Previous Next
Full log
Message #58 received at 45619 <at> debbugs.gnu.org (full text, mbox):
Lars Ingebrigtsen [2022-02-12 18:21:31] wrote:
> Stefan Monnier <monnier <at> iro.umontreal.ca> writes:
>> I don't think a single example can represent all cases. Try:
>>
>> (defun zot ()
>> (pcase-let (((or `(,foo) foo) '(2)))
>> (progn (bar))))
>
> Hm, yes.
>
>>>> I still think pcase should emit a warning when asked to bind
>>>> a dynamically scoped variable.
>>> If pcase-let currently does work fine for dynamic variables then it's
>>> likely that people are depending on it, and it's too late to change...
>>
>> I don't mean to change the generated code, but to discourage such uses
>> since they may break when the code is modified in apparently-minor ways.
>> Hence a warning.
>
> Byte-compiling this does yield a warning in Emacs 29:
>
> pcase.el:6:28: Warning: Lexical argument shadows the dynamic variable foo
Two problems with this:
- The warning talks about the generated code rather than the source
code, so it's hard for the user to understand what's going on
(there's no *argument* by that name in their code).
- The warning only shows up when the problem actually bites, whereas we
should warn about all uses of dynamically scoped vars, since they all
*may* bite at some point.
- You only get the warning if you byte-compile the code.
Stefan "off-by-one 4ever (in short, 5ever)"
This bug report was last modified 3 years and 114 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.