Subject: Re: bug#77883: 31.0.50; C-c C-e in *scratch* generates a missing lexical binding cookie warning

From: Stefan Monnier <[email-masked]>
Date: Fri, 18 Apr 2025 09:16:18 -0400

>> C-c C-e calls `eval-buffer' which "ignores the current value of the
>> `lexical-binding' variable.  Instead it will heed any
>> -*- lexical-binding: t -*- settings in the buffer, and if there is no such
>> setting, the buffer will be evaluated without lexical binding."
>> 
>> Not good in this case.
>
> Is it good in any other case?
>
> I mean, what's the logic behind ignoring the current value of
> lexical-binding, but heeding the cookie? let alone defaulting to
> dynamic binding if there's no cookie?  If the reason is backward
> compatibility, I think I'd like to see the details: where would
> changing this cause problems?

I can't remember how we ended up with this, but I strongly suspect it
has to do with the use of `eval-buffer` in `load-with-code-conversion`,
which is the most common use of `eval-buffer` (in dynamic counts, not
static counts, of course).

        Stefan