[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 21:29:34 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) |
>> 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* :-(
>
> Oh, if we call a function containing the defvar... Yes, that's probably
> rare enough that nobody's noticed.
>
> I tried to byte-compile a file and just load the .elc a few times, and
> the message was only done once:
>
> (defvar this-thing (message "hello"))
Duh, I forgot about the toplevel special case, indeed. OK, now it makes sense.
>> 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).
> I think I'd prefer keeping the behaviour we currently promise,
So do I. I'll see about updating the patch.
Stefan
bug#55156: [PATCH] eval.c: New functions `defvar-f` and `defconst-f`, Eli Zaretskii, 2022/04/28
bug#55156: [PATCH] eval.c: New functions `defvar-f` and `defconst-f`, Richard Stallman, 2022/04/28