[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#55156: [PATCH] eval.c: New functions `defvar-f` and `defconst-f`
From: |
Stefan Monnier |
Subject: |
bug#55156: [PATCH] eval.c: New functions `defvar-f` and `defconst-f` |
Date: |
Wed, 27 Apr 2022 18:29:38 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) |
Lars Ingebrigtsen [2022-04-28 00:11:05] wrote:
> Stefan Monnier via "Bug reports for GNU Emacs, the Swiss army knife of
> text editors" <bug-gnu-emacs@gnu.org> writes:
>
>> This sounds scary, but the reality is less so: while the behavior of
>> the special form obeyed its doc in this respect, the behavior of the
>> convoluted code generated by the byte-compiler did not(!) and always
>> evaluated the <exp> part anyway. So this patch also aligns the two
>> semantics to provide the same behavior.
>
> Uhm -- are you saying that if you load an .elc file twice, the <exp>
> parts in the defvars will be evaluated twice?
Try:
(let ((f (byte-compile
'(lambda (x)
(defvar sm-x (progn (message "hello %S" x) x))))))
(funcall f 5)
(funcall f 6))
and check *Messages* :-(
If we prefer keeping the behavior we currently promise, we can of course
do that (just change `defvar-f` so it takes a function of no argument as
second arg, it makes the generated code (and the C code) a bit less
simple, but it's no worse than what we currently have).
Stefan
bug#55156: [PATCH] eval.c: New functions `defvar-f` and `defconst-f`, Eli Zaretskii, 2022/04/28