diff options
author | Mattias EngdegÄrd <mattiase@acm.org> | 2023-04-14 18:26:27 +0200 |
---|---|---|
committer | Mattias EngdegÄrd <mattiase@acm.org> | 2023-04-14 19:34:23 +0200 |
commit | c60b59e04c3776a90adaa8c8fe53af3075a833b8 (patch) | |
tree | 55b5586eee1749ef451982b5edcf4f65666d0b9c /doc | |
parent | dc842a71ed035dab1115f2e67d35dd07410e18be (diff) | |
download | emacs-c60b59e04c3776a90adaa8c8fe53af3075a833b8.tar.gz |
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.
Diffstat (limited to 'doc')
-rw-r--r-- | doc/lispref/variables.texi | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi index 5584cbce9a6..f92c02ae5ed 100644 --- a/doc/lispref/variables.texi +++ b/doc/lispref/variables.texi @@ -2558,6 +2558,9 @@ documentation as @var{base-variable} has, if any, unless the documentation of the variable at the end of the chain of aliases. This function returns @var{base-variable}. + +If the resulting variable definition chain would be circular, then +Emacs will signal a @code{cyclic-variable-indirection} error. @end defun Variable aliases are convenient for replacing an old name for a @@ -2606,9 +2609,6 @@ look like: This function returns the variable at the end of the chain of aliases of @var{variable}. If @var{variable} is not a symbol, or if @var{variable} is not defined as an alias, the function returns @var{variable}. - -This function signals a @code{cyclic-variable-indirection} error if -there is a loop in the chain of symbols. @end defun @example |