[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Merging scratch/no-purespace to remove unexec and purespace
From: |
Pip Cet |
Subject: |
Re: Merging scratch/no-purespace to remove unexec and purespace |
Date: |
Fri, 20 Dec 2024 20:38:24 +0000 |
Gerd Möllmann <gerd.moellmann@gmail.com> writes:
> Pip Cet via "Emacs development discussions." <emacs-devel@gnu.org>
> writes:
>
>> "Stefan Monnier" <monnier@iro.umontreal.ca> writes:
>>
>>>>> OTOH and IMHO, it would be preferable if that symbol could not crash
>>>>> Emacs. Can we come up with a good way to fix that, while preserving the
>>>>> check that Andrea wants to keep?
>>>>
>>>> That sounds like a good thing to focus on, yes. We need to have a value
>>>> in a vector that we Fread that is distinguishable from all other values.
>>>
>>> How 'bout an uninterned symbol `#:foo`?
>>
>> I think those are legal for native-compiled subrs to use (there's a
>> comment about it, at least), so that wouldn't do us any good, would it?
>>
>> Pip
>
> Uninterned symbols are unique, i.e. (eq '#:a '#:a) => nil.
> Wouldn't that help?
I don't see how, sorry. Nativecomp produces a string in the .eln file
that is passed to make_string(), then to Fread(). The string can
include source code for uninterned symbols, but there's no way for us to
tell whether a #:lambda-fixup in there was put in by us or by the user.
What we could do is expand read so this:
(let* ((cookie (cons nil nil))
(read-table (list (cons "cookie" cookie)))
(result (read "#s(cookie cookie)")))
(eq result cookie))
to return t. Then we'd have an expressive syntax for this kind of
thing (obviously, "cookie" should be something useful in the #s(...)
syntax.
A slightly different option is to do this:
(let* ((cookie (cons nil nil))
(read-circle (list (cons 1 cookie)))
(result (read "#1#")))
(eq result cookie))
in effect allowing us to use prime the read-circle table with
externally-provided objects.
Pip
- Re: Merging scratch/no-purespace to remove unexec and purespace, (continued)
- Re: Merging scratch/no-purespace to remove unexec and purespace, Pip Cet, 2024/12/19
- Re: Merging scratch/no-purespace to remove unexec and purespace, Stefan Kangas, 2024/12/19
- Re: Merging scratch/no-purespace to remove unexec and purespace, Pip Cet, 2024/12/19
- Re: Merging scratch/no-purespace to remove unexec and purespace, Stefan Monnier, 2024/12/20
- Re: Merging scratch/no-purespace to remove unexec and purespace, Pip Cet, 2024/12/20
- Re: Merging scratch/no-purespace to remove unexec and purespace, Gerd Möllmann, 2024/12/20
- Re: Merging scratch/no-purespace to remove unexec and purespace, Andrea Corallo, 2024/12/20
- Re: Merging scratch/no-purespace to remove unexec and purespace, Pip Cet, 2024/12/21
- Re: Merging scratch/no-purespace to remove unexec and purespace, Gerd Möllmann, 2024/12/21
- Re: Merging scratch/no-purespace to remove unexec and purespace, Andrea Corallo, 2024/12/21
- Re: Merging scratch/no-purespace to remove unexec and purespace,
Pip Cet <=
- Re: Merging scratch/no-purespace to remove unexec and purespace, Gerd Möllmann, 2024/12/20
- Re: Merging scratch/no-purespace to remove unexec and purespace, Pip Cet, 2024/12/20
- Re: Merging scratch/no-purespace to remove unexec and purespace, Stefan Kangas, 2024/12/17
Re: Merging scratch/no-purespace to remove unexec and purespace, Helmut Eller, 2024/12/17
Re: Merging scratch/no-purespace to remove unexec and purespace, Helmut Eller, 2024/12/18
Re: Merging scratch/no-purespace to remove unexec and purespace, Helmut Eller, 2024/12/21