aboutsummaryrefslogtreecommitdiffstats
path: root/doc/lispref
diff options
context:
space:
mode:
authorMattias EngdegÄrd2022-09-19 10:55:09 +0200
committerMattias EngdegÄrd2022-09-19 19:30:03 +0200
commit60102016e416e5c19fa5945aeb80693dac7ff2e6 (patch)
tree69979ff773d7031634e7bc4f4388abc4ae104717 /doc/lispref
parenta7c65fc6660878e244432a5b25fb3a4ff20e8604 (diff)
downloademacs-60102016e416e5c19fa5945aeb80693dac7ff2e6.tar.gz
emacs-60102016e416e5c19fa5945aeb80693dac7ff2e6.zip
Abolish max-specpdl-size (bug#57911)
The max-lisp-eval-depth limit is sufficient to prevent unbounded stack growth including the specbind stack; simplify matters for the user by not having them to worry about two different limits. This change turns max-specpdl-size into a harmless variable with no effects, to keep existing code happy. * lisp/subr.el (max-specpdl-size): Define as an ordinary (but obsolete) dynamic variable. * admin/grammars/Makefile.in: * doc/lispintro/emacs-lisp-intro.texi (Loops & Recursion): * doc/lispref/control.texi (Cleanups): * doc/lispref/edebug.texi (Checking Whether to Stop): * doc/lispref/eval.texi (Eval): * doc/lispref/variables.texi (Local Variables): * doc/misc/calc.texi (Recursion Depth): Update documentation. * etc/NEWS: Announce. * src/eval.c (FletX): Use safe iteration to guard against circular bindings list. (syms_of_eval): Remove old max-specpdl-size definition. (init_eval_once, restore_stack_limits, call_debugger) (signal_or_quit, grow_specpdl_allocation): * leim/Makefile.in: * lisp/Makefile.in: * lisp/calc/calc-stuff.el (calc-more-recursion-depth) (calc-less-recursion-depth): * lisp/calc/calc.el (calc-do): * lisp/cedet/semantic/ede-grammar.el (ede-proj-makefile-insert-rules): * lisp/cedet/semantic/grammar.el (semantic-grammar-batch-build-one-package): * lisp/cus-start.el (standard): * lisp/emacs-lisp/comp.el (comp--native-compile): * lisp/emacs-lisp/edebug.el (edebug-max-depth): (edebug-read-and-maybe-wrap-form, edebug-default-enter): * lisp/emacs-lisp/regexp-opt.el (regexp-opt): * lisp/eshell/esh-mode.el (eshell-mode): * lisp/loadup.el (max-specpdl-size): * lisp/mh-e/mh-e.el (mh-invisible-headers): * lisp/net/shr.el (shr-insert-document, shr-descend): * lisp/play/hanoi.el (hanoi-internal): * lisp/progmodes/cperl-mode.el: * src/fileio.c (Fdo_auto_save): Remove references to and modifications of max-specpdl-size.
Diffstat (limited to 'doc/lispref')
-rw-r--r--doc/lispref/control.texi5
-rw-r--r--doc/lispref/edebug.texi5
-rw-r--r--doc/lispref/eval.texi5
-rw-r--r--doc/lispref/variables.texi21
4 files changed, 3 insertions, 33 deletions
diff --git a/doc/lispref/control.texi b/doc/lispref/control.texi
index d4520ebdee5..ee2acdb002b 100644
--- a/doc/lispref/control.texi
+++ b/doc/lispref/control.texi
@@ -2366,11 +2366,6 @@ of the @var{cleanup-forms} themselves exits nonlocally (via a
2366guaranteed to evaluate the rest of them. If the failure of one of the 2366guaranteed to evaluate the rest of them. If the failure of one of the
2367@var{cleanup-forms} has the potential to cause trouble, then protect 2367@var{cleanup-forms} has the potential to cause trouble, then protect
2368it with another @code{unwind-protect} around that form. 2368it with another @code{unwind-protect} around that form.
2369
2370The number of currently active @code{unwind-protect} forms counts,
2371together with the number of local variable bindings, against the limit
2372@code{max-specpdl-size} (@pxref{Definition of max-specpdl-size,, Local
2373Variables}).
2374@end defspec 2369@end defspec
2375 2370
2376 For example, here we make an invisible buffer for temporary use, and 2371 For example, here we make an invisible buffer for temporary use, and
diff --git a/doc/lispref/edebug.texi b/doc/lispref/edebug.texi
index 56f7b7bdfad..6a51489d8a4 100644
--- a/doc/lispref/edebug.texi
+++ b/doc/lispref/edebug.texi
@@ -1032,9 +1032,8 @@ program.
1032@itemize @bullet 1032@itemize @bullet
1033@item 1033@item
1034@vindex edebug-max-depth 1034@vindex edebug-max-depth
1035@code{max-lisp-eval-depth} (@pxref{Eval}) and @code{max-specpdl-size} 1035@code{max-lisp-eval-depth} (@pxref{Eval}) is increased to reduce Edebug's
1036(@pxref{Local Variables}) are both increased to reduce Edebug's impact 1036impact on the stack. You could, however, still run out of stack space when
1037on the stack. You could, however, still run out of stack space when
1038using Edebug. You can also enlarge the value of 1037using Edebug. You can also enlarge the value of
1039@code{edebug-max-depth} if Edebug reaches the limit of recursion depth 1038@code{edebug-max-depth} if Edebug reaches the limit of recursion depth
1040instrumenting code that contains very large quoted lists. 1039instrumenting code that contains very large quoted lists.
diff --git a/doc/lispref/eval.texi b/doc/lispref/eval.texi
index 6e29a5403f1..11c321b32ed 100644
--- a/doc/lispref/eval.texi
+++ b/doc/lispref/eval.texi
@@ -830,7 +830,7 @@ This variable defines the maximum depth allowed in calls to @code{eval},
830@code{apply}, and @code{funcall} before an error is signaled (with error 830@code{apply}, and @code{funcall} before an error is signaled (with error
831message @code{"Lisp nesting exceeds max-lisp-eval-depth"}). 831message @code{"Lisp nesting exceeds max-lisp-eval-depth"}).
832 832
833This limit, with the associated error when it is exceeded, is one way 833This limit, with the associated error when it is exceeded, is how
834Emacs Lisp avoids infinite recursion on an ill-defined function. If 834Emacs Lisp avoids infinite recursion on an ill-defined function. If
835you increase the value of @code{max-lisp-eval-depth} too much, such 835you increase the value of @code{max-lisp-eval-depth} too much, such
836code can cause stack overflow instead. On some systems, this overflow 836code can cause stack overflow instead. On some systems, this overflow
@@ -851,9 +851,6 @@ less than 100, Lisp will reset it to 100 if the given value is
851reached. Entry to the Lisp debugger increases the value, if there is 851reached. Entry to the Lisp debugger increases the value, if there is
852little room left, to make sure the debugger itself has room to 852little room left, to make sure the debugger itself has room to
853execute. 853execute.
854
855@code{max-specpdl-size} provides another limit on nesting.
856@xref{Definition of max-specpdl-size,, Local Variables}.
857@end defopt 854@end defopt
858 855
859@defvar values 856@defvar values
diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi
index 975e945b343..ccd19630bf7 100644
--- a/doc/lispref/variables.texi
+++ b/doc/lispref/variables.texi
@@ -358,27 +358,6 @@ Variables}); a few variables have terminal-local bindings
358like ordinary local bindings, but they are localized depending on 358like ordinary local bindings, but they are localized depending on
359where you are in Emacs. 359where you are in Emacs.
360 360
361@defopt max-specpdl-size
362@anchor{Definition of max-specpdl-size}
363@cindex variable limit error
364@cindex evaluation error
365@cindex infinite recursion
366This variable defines the limit on the total number of local variable
367bindings and @code{unwind-protect} cleanups (@pxref{Cleanups,,
368Cleaning Up from Nonlocal Exits}) that are allowed before Emacs
369signals an error (with data @code{"Variable binding depth exceeds
370max-specpdl-size"}).
371
372This limit, with the associated error when it is exceeded, is one way
373that Lisp avoids infinite recursion on an ill-defined function.
374@code{max-lisp-eval-depth} provides another limit on depth of nesting.
375@xref{Definition of max-lisp-eval-depth,, Eval}.
376
377The default value is 2500. Entry to the Lisp debugger increases the
378value, if there is little room left, to make sure the debugger itself
379has room to execute.
380@end defopt
381
382@node Void Variables 361@node Void Variables
383@section When a Variable is Void 362@section When a Variable is Void
384@cindex @code{void-variable} error 363@cindex @code{void-variable} error