GNU bug report logs -
#39373
27.0.50; [PATCH] mode-local-print-bindings broken with lexical-binding
Previous Next
Reported by: Mattias EngdegÄrd <mattiase <at> acm.org>
Date: Fri, 31 Jan 2020 17:41:03 UTC
Severity: normal
Found in version 27.0.50
Done: Lars Ingebrigtsen <larsi <at> gnus.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
31 jan. 2020 kl. 21.25 skrev Eli Zaretskii <eliz <at> gnu.org>:
> That's not the "usual" way of fixing problems with lexical-binding,
> and it isn't immediately clear to me why that fixes the problem.
'add-to-list' doesn't work on lexical variables because it's a plain function taking the variable symbol as argument. 'push' works on lexical variables since it is a macro that expands to direct variable reference and setq. I should perhaps have included this in the commit message.
Happily, Emacs provides generalised variable support for 'if' and 'cons', so that they can be used as target for 'push'.
We could sink the pushes to the leaves of the condition tree, if you prefer:
(cond ((get s 'mode-variable-flag)
(if (get s 'constant-flag) (push s mc) (push s mv)))
((get s 'override-flag)
(if (get s 'constant-flag) (push s fo) (push s ov)))
(t (push s us)))
Not as elegant or concise, but does not rely on if and cond as GVs in push.
This bug report was last modified 4 years and 282 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.