]> git.eshelyaron.com Git - emacs.git/commit
Disallow creation of circular variable alias chains
authorMattias Engdegård <mattiase@acm.org>
Fri, 14 Apr 2023 16:26:27 +0000 (18:26 +0200)
committerMattias Engdegård <mattiase@acm.org>
Fri, 14 Apr 2023 17:34:23 +0000 (19:34 +0200)
commitc60b59e04c3776a90adaa8c8fe53af3075a833b8
tree55b5586eee1749ef451982b5edcf4f65666d0b9c
parentdc842a71ed035dab1115f2e67d35dd07410e18be
Disallow creation of circular variable alias chains

Make `defvaralias` signal an error upon attempts to create variable
alias cycles.  This detects errors earlier and makes the alias
traversal during execution simpler and faster since no cycle detection
is needed elsewhere.
Now variable and function aliases are handled identically in these
respects.

* src/lisp.h (indirect_variable): Remove declaration.
* src/data.c (indirect_variable): Remove.
(Findirect_variable): Update doc string.  Simplify alias resolution.
(Fboundp, find_symbol_value, set_internal, default_value)
(set_default_internal, Fmake_variable_buffer_local)
(Fmake_local_variable, Fkill_local_variable, Flocal_variable_p)
(Flocal_variable_if_set_p, Fvariable_binding_locus):
* src/buffer.c (buffer_local_value):
* src/eval.c (specbind): Simplify variable alias resolution.
(Fdefvaralias): Update doc string.  Check for cycles.
* doc/lispref/variables.texi (Variable Aliases):
Mention that `defvaralias` can signal `cyclic-variable-indirection`
but `indirect-variable` cannot.
* etc/NEWS: Announce the change.
* test/src/eval-tests.el (eval-tests-defvaralias): New test.
doc/lispref/variables.texi
etc/NEWS
src/buffer.c
src/data.c
src/eval.c
src/lisp.h
test/src/eval-tests.el