|
From: | Sergey Vinokurov |
Subject: | bug#53242: [PATCH] unify reads from local_var_alist |
Date: | Fri, 14 Jan 2022 18:37:45 +0000 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 |
On 14/01/2022 08:08, Eli Zaretskii wrote:
Date: Fri, 14 Jan 2022 00:23:42 +0000 From: Sergey Vinokurov <serg.foo@gmail.com> I've noticed that local_var_alist field of the buffer structure is accessed inconsistently. Sometimes it's Fassoc, sometimes it's Fassq and other times it's assq_no_quit and even an explicit loop. I think it's safe to unify all the accesses via assq_no_quit since it's an internaly maintained alist that definitely has no cycles and elements are cons cells with symbol as their car.How long can local_var_alist be? This change will not allow the user to C-g from a long search. Do we care? How about using Fassq consistently instead?
This list is not directly observed by the user. The lookups happen during reads and writes of the buffer-local variables so if it's really slow the only effect user would observe is that elisp got slow. There's no single point for the user to C-g from.
This list definitely cannot be longer than a list of all the global variables ever defined. This upper bound is probably a high number, but not astronomically high. Perhaps if list gets really long it could be beneficial to use some other data structure, perhaps a hash table, instead.
[Prev in Thread] | Current Thread | [Next in Thread] |