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

From: Eli Zaretskii <[email-masked]>
Date: Fri, 18 Apr 2025 16:45:44 +0300

> From: Stefan Monnier <[email-masked]>
> Cc: Michael Heerdegen <[email-masked]>,  [email-masked],
>   [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).

If load-with-code-conversion is the only case where this is needed, we
could do that locally in load-with-code-conversion, right?  I mean,
there's no need to "punish" all the users of eval-buffer for that
single use.  Right?