[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#45619: 28.0.50; pcase-let on MacOS doesn't work
From: |
Stefan Monnier |
Subject: |
bug#45619: 28.0.50; pcase-let on MacOS doesn't work |
Date: |
Sat, 12 Feb 2022 17:33:57 -0500 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) |
Lars Ingebrigtsen [2022-02-12 18:21:31] wrote:
> Stefan Monnier <monnier@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)"