diff options
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/Makefile.in | 8 | ||||
-rw-r--r-- | lisp/calc/calc-stuff.el | 8 | ||||
-rw-r--r-- | lisp/calc/calc.el | 3 | ||||
-rw-r--r-- | lisp/cedet/semantic/ede-grammar.el | 7 | ||||
-rw-r--r-- | lisp/cedet/semantic/grammar.el | 1 | ||||
-rw-r--r-- | lisp/cus-start.el | 1 | ||||
-rw-r--r-- | lisp/emacs-lisp/comp.el | 1 | ||||
-rw-r--r-- | lisp/emacs-lisp/edebug.el | 6 | ||||
-rw-r--r-- | lisp/emacs-lisp/regexp-opt.el | 1 | ||||
-rw-r--r-- | lisp/eshell/esh-mode.el | 1 | ||||
-rw-r--r-- | lisp/loadup.el | 4 | ||||
-rw-r--r-- | lisp/mh-e/mh-e.el | 4 | ||||
-rw-r--r-- | lisp/net/shr.el | 62 | ||||
-rw-r--r-- | lisp/play/hanoi.el | 5 | ||||
-rw-r--r-- | lisp/progmodes/cperl-mode.el | 1 | ||||
-rw-r--r-- | lisp/subr.el | 8 |
16 files changed, 50 insertions, 71 deletions
diff --git a/lisp/Makefile.in b/lisp/Makefile.in index c73a623cce9..bcf4a3146d4 100644 --- a/lisp/Makefile.in +++ b/lisp/Makefile.in @@ -70,9 +70,7 @@ BYTE_COMPILE_FLAGS = \ --eval "(setq load-prefer-newer t byte-compile-warnings 'all)" \ $(BYTE_COMPILE_EXTRA_FLAGS) # ... but we must prefer .elc files for those in the early bootstrap. -# A larger `max-specpdl-size' is needed for emacs-lisp/comp.el. -compile-first: BYTE_COMPILE_FLAGS = \ - --eval '(setq max-specpdl-size 5000)' $(BYTE_COMPILE_EXTRA_FLAGS) +compile-first: BYTE_COMPILE_FLAGS = $(BYTE_COMPILE_EXTRA_FLAGS) # Files to compile before others during a bootstrap. This is done to # speed up the bootstrap process. They're ordered by size, so we use @@ -342,8 +340,8 @@ compile-first: $(COMPILE_FIRST) .PHONY: compile-targets # TARGETS is set dynamically in the recursive call from 'compile-main'. -# Do not build comp.el unless necessary not to exceed max-specpdl-size and -# max-lisp-eval-depth in normal builds. +# Do not build comp.el unless necessary not to exceed max-lisp-eval-depth +# in normal builds. ifneq ($(HAVE_NATIVE_COMP),yes) compile-targets: $(filter-out ./emacs-lisp/comp-cstr.elc,$(filter-out ./emacs-lisp/comp.elc,$(TARGETS))) else diff --git a/lisp/calc/calc-stuff.el b/lisp/calc/calc-stuff.el index 0e8ea42bedc..758b9201843 100644 --- a/lisp/calc/calc-stuff.el +++ b/lisp/calc/calc-stuff.el @@ -52,18 +52,14 @@ With a prefix, push that prefix as a number onto the stack." (calc-less-recursion-depth n) (let ((n (if n (prefix-numeric-value n) 2))) (if (> n 1) - (setq max-specpdl-size (* max-specpdl-size n) - max-lisp-eval-depth (* max-lisp-eval-depth n)))) + (setq max-lisp-eval-depth (* max-lisp-eval-depth n)))) (message "max-lisp-eval-depth is now %d" max-lisp-eval-depth)))) (defun calc-less-recursion-depth (n) (interactive "P") (let ((n (if n (prefix-numeric-value n) 2))) (if (> n 1) - (setq max-specpdl-size - (max (/ max-specpdl-size n) 600) - max-lisp-eval-depth - (max (/ max-lisp-eval-depth n) 200)))) + (setq max-lisp-eval-depth (max (/ max-lisp-eval-depth n) 200)))) (message "max-lisp-eval-depth is now %d" max-lisp-eval-depth)) diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el index 5077c8c8528..c0f87ad3d42 100644 --- a/lisp/calc/calc.el +++ b/lisp/calc/calc.el @@ -1625,8 +1625,7 @@ See calc-keypad for details." (error (if (and (eq (car err) 'error) (stringp (nth 1 err)) - (string-match "max-specpdl-size\\|max-lisp-eval-depth" - (nth 1 err))) + (string-search "max-lisp-eval-depth" (nth 1 err))) (error (substitute-command-keys "Computation got stuck or ran too long. Type \\`M' to increase the limit")) (setq calc-aborted-prefix nil) diff --git a/lisp/cedet/semantic/ede-grammar.el b/lisp/cedet/semantic/ede-grammar.el index ff9f991ff4a..40ff8fc86d3 100644 --- a/lisp/cedet/semantic/ede-grammar.el +++ b/lisp/cedet/semantic/ede-grammar.el @@ -177,10 +177,9 @@ Lays claim to all -by.el, and -wy.el files." (cl-defmethod ede-proj-makefile-insert-rules :after ((this semantic-ede-proj-target-grammar)) "Insert rules needed by THIS target. -This raises `max-specpdl-size' and `max-lisp-eval-depth', which can be -needed for the compilation of the resulting parsers." - (insert (format "%s: EMACSFLAGS+= --eval '(setq max-specpdl-size 1500 \ -max-lisp-eval-depth 700)'\n" +This raises `max-lisp-eval-depth', which can be needed for the compilation +of the resulting parsers." + (insert (format "%s: EMACSFLAGS+= --eval '(setq max-lisp-eval-depth 700)'\n" (oref this name)))) (cl-defmethod ede-proj-makefile-insert-dist-dependencies ((this semantic-ede-proj-target-grammar)) diff --git a/lisp/cedet/semantic/grammar.el b/lisp/cedet/semantic/grammar.el index 72037f47108..8ba0e346fff 100644 --- a/lisp/cedet/semantic/grammar.el +++ b/lisp/cedet/semantic/grammar.el @@ -1009,7 +1009,6 @@ Return non-nil if there were no errors, nil if errors." packagename (byte-compile-dest-file packagename)) (let (;; Some complex grammar table expressions need a few ;; more resources than the default. - (max-specpdl-size (max 3000 max-specpdl-size)) (max-lisp-eval-depth (max 1000 max-lisp-eval-depth)) ) ;; byte compile the resultant file diff --git a/lisp/cus-start.el b/lisp/cus-start.el index 0e1cb4589da..d7fb56c9854 100644 --- a/lisp/cus-start.el +++ b/lisp/cus-start.el @@ -251,7 +251,6 @@ Leaving \"Default\" unchecked is equivalent with specifying a default of ;; emacs.c (report-emacs-bug-address emacsbug string) ;; eval.c - (max-specpdl-size limits integer) (max-lisp-eval-depth limits integer) (max-mini-window-height limits (choice (const :tag "quarter screen" nil) diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el index a9087313b18..35acbff9b17 100644 --- a/lisp/emacs-lisp/comp.el +++ b/lisp/emacs-lisp/comp.el @@ -4044,7 +4044,6 @@ the deferred compilation mechanism." (list "Not a function symbol or file" function-or-file))) (catch 'no-native-compile (let* ((print-symbols-bare t) - (max-specpdl-size (max max-specpdl-size 5000)) (data function-or-file) (comp-native-compiling t) (byte-native-qualities nil) diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el index 31c05057bfa..67704bdb51c 100644 --- a/lisp/emacs-lisp/edebug.el +++ b/lisp/emacs-lisp/edebug.el @@ -129,7 +129,7 @@ contains an infinite loop. When Edebug is instrumenting code containing very large quoted lists, it may reach this limit and give the error message \"Too deep - perhaps infinite loop in spec?\". Make this limit larger to countermand that, but you may also need to -increase `max-lisp-eval-depth' and `max-specpdl-size'." +increase `max-lisp-eval-depth'." :type 'integer :version "26.1") @@ -1107,8 +1107,7 @@ purpose by adding an entry to this alist, and setting edebug-best-error edebug-error-point ;; Do this once here instead of several times. - (max-lisp-eval-depth (+ 800 max-lisp-eval-depth)) - (max-specpdl-size (+ 2000 max-specpdl-size))) + (max-lisp-eval-depth (+ 800 max-lisp-eval-depth))) (let ((no-match (catch 'no-match (setq result (edebug-read-and-maybe-wrap-form1)) @@ -2317,7 +2316,6 @@ and run its entry function, and set up `edebug-before' and ;; but not inside an unwind-protect. ;; Doing it here also keeps it from growing too large. (max-lisp-eval-depth (+ 100 max-lisp-eval-depth)) ; too much?? - (max-specpdl-size (+ 200 max-specpdl-size)) (debugger edebug-debugger) ; only while edebug is active. (edebug-outside-debug-on-error debug-on-error) diff --git a/lisp/emacs-lisp/regexp-opt.el b/lisp/emacs-lisp/regexp-opt.el index cae5dd00d1d..4d5a39458d2 100644 --- a/lisp/emacs-lisp/regexp-opt.el +++ b/lisp/emacs-lisp/regexp-opt.el @@ -133,7 +133,6 @@ usually more efficient than that of a simplified version: (save-match-data ;; Recurse on the sorted list. (let* ((max-lisp-eval-depth 10000) - (max-specpdl-size 10000) (completion-ignore-case nil) (completion-regexp-list nil) (open (cond ((stringp paren) paren) (paren "\\("))) diff --git a/lisp/eshell/esh-mode.el b/lisp/eshell/esh-mode.el index 69069183a3f..8f11e6f04a4 100644 --- a/lisp/eshell/esh-mode.el +++ b/lisp/eshell/esh-mode.el @@ -331,7 +331,6 @@ and the hook `eshell-exit-hook'." (setq-local require-final-newline nil) (setq-local max-lisp-eval-depth (max 3000 max-lisp-eval-depth)) - (setq-local max-specpdl-size (max 6000 max-lisp-eval-depth)) (setq-local eshell-last-input-start (point-marker)) (setq-local eshell-last-input-end (point-marker)) diff --git a/lisp/loadup.el b/lisp/loadup.el index 634a3314361..c01c827a75e 100644 --- a/lisp/loadup.el +++ b/lisp/loadup.el @@ -244,9 +244,7 @@ (load "language/indonesian") (load "indent") -(let ((max-specpdl-size (max max-specpdl-size 1800))) - ;; A particularly demanding file to load; 1600 does not seem to be enough. - (load "emacs-lisp/cl-generic")) +(load "emacs-lisp/cl-generic") (load "simple") (load "emacs-lisp/seq") (load "emacs-lisp/nadvice") diff --git a/lisp/mh-e/mh-e.el b/lisp/mh-e/mh-e.el index 0ad934107d3..9a04d890973 100644 --- a/lisp/mh-e/mh-e.el +++ b/lisp/mh-e/mh-e.el @@ -2831,9 +2831,7 @@ removed and entries from `mh-invisible-header-fields' are added." (setq mh-invisible-header-fields-compiled (concat "^" - ;; workaround for insufficient default - (let ((max-specpdl-size 1000)) - (regexp-opt fields t)))) + (regexp-opt fields t))) (setq mh-invisible-header-fields-compiled nil)))) ;; Compile invisible header fields. diff --git a/lisp/net/shr.el b/lisp/net/shr.el index 54ce9b1a41c..d56420eb02e 100644 --- a/lisp/net/shr.el +++ b/lisp/net/shr.el @@ -373,7 +373,6 @@ DOM should be a parse tree as generated by shr-width (* shr-width (frame-char-width))) (shr--window-width))) - (max-specpdl-size max-specpdl-size) (shr--link-targets nil) (hscroll (window-hscroll)) ;; `bidi-display-reordering' is supposed to be only used for @@ -625,41 +624,34 @@ size, and full-buffer size." (shr-stylesheet shr-stylesheet) (shr-depth (1+ shr-depth)) (start (point))) - ;; shr uses many frames per nested node. - (if (and (> shr-depth (/ max-specpdl-size 15)) - (not (and shr-offer-extend-specpdl - (y-or-n-p "Too deeply nested to render properly; increase `max-specpdl-size'?") - (setq max-specpdl-size (* max-specpdl-size 2))))) - (setq shr-warning - "Not rendering the complete page because of too-deep nesting") + (when style + (if (string-match-p "color\\|display\\|border-collapse" style) + (setq shr-stylesheet (nconc (shr-parse-style style) + shr-stylesheet)) + (setq style nil))) + ;; If we have a display:none, then just ignore this part of the DOM. + (unless (or (equal (cdr (assq 'display shr-stylesheet)) "none") + (and shr-discard-aria-hidden + (equal (dom-attr dom 'aria-hidden) "true"))) + ;; We don't use shr-indirect-call here, since shr-descend is + ;; the central bit of shr.el, and should be as fast as + ;; possible. Having one more level of indirection with its + ;; negative effect on performance is deemed unjustified in + ;; this case. + (cond (external + (funcall external dom)) + ((fboundp function) + (funcall function dom)) + (t + (shr-generic dom))) + (when-let ((id (dom-attr dom 'id))) + (push (cons id (set-marker (make-marker) start)) shr--link-targets)) + ;; If style is set, then this node has set the color. (when style - (if (string-match-p "color\\|display\\|border-collapse" style) - (setq shr-stylesheet (nconc (shr-parse-style style) - shr-stylesheet)) - (setq style nil))) - ;; If we have a display:none, then just ignore this part of the DOM. - (unless (or (equal (cdr (assq 'display shr-stylesheet)) "none") - (and shr-discard-aria-hidden - (equal (dom-attr dom 'aria-hidden) "true"))) - ;; We don't use shr-indirect-call here, since shr-descend is - ;; the central bit of shr.el, and should be as fast as - ;; possible. Having one more level of indirection with its - ;; negative effect on performance is deemed unjustified in - ;; this case. - (cond (external - (funcall external dom)) - ((fboundp function) - (funcall function dom)) - (t - (shr-generic dom))) - (when-let ((id (dom-attr dom 'id))) - (push (cons id (set-marker (make-marker) start)) shr--link-targets)) - ;; If style is set, then this node has set the color. - (when style - (shr-colorize-region - start (point) - (cdr (assq 'color shr-stylesheet)) - (cdr (assq 'background-color shr-stylesheet)))))))) + (shr-colorize-region + start (point) + (cdr (assq 'color shr-stylesheet)) + (cdr (assq 'background-color shr-stylesheet))))))) (defun shr-fill-text (text) (if (zerop (length text)) diff --git a/lisp/play/hanoi.el b/lisp/play/hanoi.el index 58fb82b6ed0..1a4b6dbeb11 100644 --- a/lisp/play/hanoi.el +++ b/lisp/play/hanoi.el @@ -149,10 +149,9 @@ BITS must be of length nrings. Start at START-TIME." (setq show-trailing-whitespace nil) (unwind-protect (let* - (;; These lines can cause Emacs to crash if you ask for too - ;; many rings. If you uncomment them, on most systems you + (;; This line can cause Emacs to crash if you ask for too + ;; many rings. If you uncomment it, on most systems you ;; can get 10,000+ rings. - ;;(max-specpdl-size (max max-specpdl-size (* nrings 15))) ;;(max-lisp-eval-depth (max max-lisp-eval-depth (+ nrings 20))) (vert (not hanoi-horizontal-flag)) (pole-width (length (format "%d" (max 0 (1- nrings))))) diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el index 614ee60fa03..c3704a05dbb 100644 --- a/lisp/progmodes/cperl-mode.el +++ b/lisp/progmodes/cperl-mode.el @@ -3718,7 +3718,6 @@ This is part of `cperl-find-pods-heres' (below)." overshoot warning-message))) -;; Debugging this may require (setq max-specpdl-size 2000)... (defun cperl-find-pods-heres (&optional min max non-inter end ignore-max end-of-here-doc) "Scan the buffer for hard-to-parse Perl constructions. If `cperl-pod-here-fontify' is non-nil after evaluation, diff --git a/lisp/subr.el b/lisp/subr.el index d7cdc28abba..59f9308f31e 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -1859,6 +1859,14 @@ be a list of the form returned by `event-start' and `event-end'." ;; in warnings when using `values' in let-bindings. ;;(make-obsolete-variable 'values "no longer used" "28.1") +(defvar max-specpdl-size 2500 + "Former limit on specbindings, now without effect. +This variable used to limit the size of the specpdl stack which, +among other things, holds dynamic variable bindings and `unwind-protect' +activations. To prevent runaway recursion, use `max-lisp-eval-depth' +instead; it will indirectly limit the specpdl stack size as well.") +(make-obsolete-variable 'max-specpdl-size nil "29.1") + ;;;; Alternate names for functions - these are not being phased out. |