* bug#46713: 27.1; Variable binding depth exceeds max-specpdl-size in js-mode with js-indent-level 2 and indent-tabs-mode nil on new line @ 2021-02-22 22:22 Ryan Olson 2021-02-22 22:36 ` Lars Ingebrigtsen 0 siblings, 1 reply; 10+ messages in thread From: Ryan Olson @ 2021-02-22 22:22 UTC (permalink / raw) To: 46713 In GNU Emacs 27.1 (build 1, x86_64-apple-darwin18.7.0, NS appkit-1671.60 Version 10.14.6 (Build 18G95)) of 2020-08-11 built on builder10-14.porkrind.org Windowing system distributor 'Apple', version 10.3.1894 System Description: Mac OS X 10.15.7 Recent messages: Wrote /Users/CENSORED/CENSORED/src/CENSORED/CENSORED/CENSORED.js Quit 2 (#o2, #x2, ?\C-b) Saving file /Users/CENSORED/CENSORED/src/CENSORED/CENSORED/CENSORED.js... Wrote /Users/CENSORED/CENSORED/src/CENSORED/CENSORED/CENSORED.js Error during redisplay: (internal--syntax-propertize 2120) signaled (error "Variable binding depth exceeds max-specpdl-size") back-to-indentation: internal--syntax-propertize did not move syntax-propertize--doneError during redisplay: (internal--syntax-propertize 2645) signaled (error "Variable binding depth exceeds max-specpdl-size") Error during redisplay: (jit-lock-function 2121) signaled (error "internal--syntax-propertize did not move syntax-propertize--done") Error during redisplay: (jit-lock-function 3138) signaled (error "Variable binding depth exceeds max-specpdl-size") Error during redisplay: (jit-lock-function 3638) signaled (error "Variable binding depth exceeds max-specpdl-size") Configured using: 'configure --with-ns '--enable-locallisppath=/Library/Application Support/Emacs/${version}/site-lisp:/Library/Application Support/Emacs/site-lisp' --with-modules' Configured features: NOTIFY KQUEUE ACL GNUTLS LIBXML2 ZLIB TOOLKIT_SCROLL_BARS NS MODULES THREADS JSON PDUMPER Important settings: value of $LANG: en_US.UTF-8 locale-coding-system: utf-8-unix Major mode: JavaScript[JSX] Minor modes in effect: tooltip-mode: t global-eldoc-mode: t electric-indent-mode: t mouse-wheel-mode: t tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t line-number-mode: t transient-mark-mode: t Load-path shadows: None found. Features: (shadow sort mail-extr emacsbug message rmc puny dired dired-loaddefs format-spec rfc822 mml mml-sec password-cache epa derived epg epg-config gnus-util rmail rmail-loaddefs text-property-search mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils time-date vc-git diff-mode easy-mmode js json subr-x map seq byte-opt gv bytecomp byte-compile cconv imenu cc-mode cc-fonts easymenu cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs cl-loaddefs cl-lib tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type mwheel term/ns-win ns-win ucs-normalize mule-util term/common-win tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode elisp-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch timer select scroll-bar mouse jit-lock font-lock syntax facemenu font-core term/tty-colors frame minibuffer cl-generic cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite charscript charprop case-table epa-hook jka-cmpr-hook help simple abbrev obarray cl-preloaded nadvice loaddefs button faces cus-face macroexp files text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote threads kqueue cocoa ns multi-tty make-network-process emacs) Memory information: ((conses 16 77539 14591) (symbols 48 9435 1) (strings 32 25046 1242) (string-bytes 1 941698) (vectors 16 13840) (vector-slots 8 178575 12426) (floats 8 30 274) (intervals 56 717 4) (buffers 1000 13)) ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#46713: 27.1; Variable binding depth exceeds max-specpdl-size in js-mode with js-indent-level 2 and indent-tabs-mode nil on new line 2021-02-22 22:22 bug#46713: 27.1; Variable binding depth exceeds max-specpdl-size in js-mode with js-indent-level 2 and indent-tabs-mode nil on new line Ryan Olson @ 2021-02-22 22:36 ` Lars Ingebrigtsen 2021-02-23 2:03 ` Ryan Olson 0 siblings, 1 reply; 10+ messages in thread From: Lars Ingebrigtsen @ 2021-02-22 22:36 UTC (permalink / raw) To: Ryan Olson; +Cc: 46713 Ryan Olson <ryan.olson.x@gmail.com> writes: > (error "Variable binding depth exceeds max-specpdl-size") > back-to-indentation: internal--syntax-propertize did not move > syntax-propertize--doneError during redisplay: > (internal--syntax-propertize 2645) signaled (error "Variable binding > depth exceeds max-specpdl-size") Do you have a recipe to reproduce this error, starting from "emacs -Q"? -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#46713: 27.1; Variable binding depth exceeds max-specpdl-size in js-mode with js-indent-level 2 and indent-tabs-mode nil on new line 2021-02-22 22:36 ` Lars Ingebrigtsen @ 2021-02-23 2:03 ` Ryan Olson 2021-02-23 15:36 ` Lars Ingebrigtsen 0 siblings, 1 reply; 10+ messages in thread From: Ryan Olson @ 2021-02-23 2:03 UTC (permalink / raw) To: Lars Ingebrigtsen; +Cc: 46713 Hi Lars, I do. I'm not sure why it takes this, but for my specific js file (with a few things replaced -- because it's company code) it has issues. Repro steps: 1. Open foo.js with emacs -Q --eval '(setq-default js-indent-level 2 indent-tabs-mode nil)' foo.js 2. Go to line 61 3. Delete brace at end of that line 4. Save 5. Add brace back 6. Press RET 7. Errors happen foo.js: import React, { useEffect } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { useHistory } from 'react-router'; import { Link } from 'react-router-dom'; import { Grid } from '@rmwc/grid'; import { getFoos, selectFoos, selectIsLoadingFoos, selectTotalTimesFoosFetched, } from 'store/slices/foos.slice'; import { clearFoo } from 'store/slices/foo.slice'; import { filterDefinitions, getUniqueFooKey, searchProperties, getFeaturesForFoo, } from './foosHelpers'; import { useFilters } from 'components/Filtering/useFilters'; import Fab from 'components/Fab'; import SortableDataTable from 'components/SortableDataTable'; import FilterBar from 'components/Filtering/FilterBar'; import useUpdateEffect from 'hooks/useUpdateEffect'; export default function FoosList() { const dispatch = useDispatch(); const history = useHistory(); const isLoading = useSelector(selectIsLoadingFoos); const foos = useSelector(selectFoos); const totalTimesFoosFetched = useSelector( selectTotalTimesFoosFetched ); const filterBag = useFilters( 'foos', foos, filterDefinitions, searchProperties ); const { getFilterByKey, clearFilter } = filterBag; const canAddFoo = useSelector(state => state.permissions.canAddFoo); function requestFoos() { dispatch(getFoos({ dispatch })); } // Get foos from the server (if needed). // It attempts to skip reloading the foos, when it can. useEffect(() => { const isFirstLoad = totalTimesFoosFetched === 0; // Since we're only checking this on mount, I think // it's safe to say that if we don't have foos and it's // not our first load (while mounting), then this would be a // place where we've invalidated foos by clearing them out. // (to force a load) const foosInvalidated = !isFirstLoad && foos.length === 0; const shouldFetch = isFirstLoad || foosInvalidated; if (shouldFetch) { requestFoos(); } }, []); // When show foos filter changes, // get foos from the server. useUpdateEffect(() => { requestFoos(); }, []); // Clear foo data from redux. useEffect(() => { // Clear foo itself. dispatch(clearFoo()); }, []); // If we initially load foos and none come back that follow // our initial filter (only show centralized foos == true) // Remove that filter and fetch foos again. useEffect(() => { if (totalTimesFoosFetched === 1 && foos.length === 0) { // NOTE: this triggers a different effect to get foos that // match this filter. clearFilter(); } }, [foos, totalTimesFoosFetched]); function getFooLink(foo) { if (hasValue(foo.fooCode)) { return `/foos/foo/fooCode/${foo.fooCode}`; } if (foo(foo)) { return `/foos/foo//${foo.id}`; } // Shouldn't get here. If all else fails, it shouldn't route anywhere. return '#'; } return ( <Grid> <FilterBar filterBag={filterBag}> < /> </FilterBar> <SortableDataTable data={filterBag.filteredData} isLoading={isLoading} noRowsMessage="No foos to display." schema={{ getRowKey: getUniqueFooKey, columns: [ { headerName: 'Foo Name', getColumnValue: foo => ( <Link to={getFooLink(foo)} className={sharedCss.colorPrimary} > {foo.fooName} </Link> ), getSortValue: foo => foo.fooName, }, { headerName: 'Foo Code', getColumnValue: foo => foo.fooCode, className: globalCss.width100, }, { headerName: 'Site ID', // If there's no site id, it comes down as 0. getColumnValue: foo => foo.siteId || null, className: globalCss.width100, }, { headerName: 'Master Foo ID', getColumnValue: foo => foo.id, className: globalCss.width100, }, ].filter(Boolean), }} /> {canAddFoo && ( <Fab icon="add" onClick={() => history.push('/foos/new')} /> )} </Grid> ); } On Mon, Feb 22, 2021 at 3:36 PM Lars Ingebrigtsen <larsi@gnus.org> wrote: > > Ryan Olson <ryan.olson.x@gmail.com> writes: > > > (error "Variable binding depth exceeds max-specpdl-size") > > back-to-indentation: internal--syntax-propertize did not move > > syntax-propertize--doneError during redisplay: > > (internal--syntax-propertize 2645) signaled (error "Variable binding > > depth exceeds max-specpdl-size") > > Do you have a recipe to reproduce this error, starting from "emacs -Q"? > > -- > (domestic pets only, the antidote for overdose, milk.) > bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#46713: 27.1; Variable binding depth exceeds max-specpdl-size in js-mode with js-indent-level 2 and indent-tabs-mode nil on new line 2021-02-23 2:03 ` Ryan Olson @ 2021-02-23 15:36 ` Lars Ingebrigtsen 2021-02-23 16:31 ` Ryan Olson 2022-06-19 13:53 ` Lars Ingebrigtsen 0 siblings, 2 replies; 10+ messages in thread From: Lars Ingebrigtsen @ 2021-02-23 15:36 UTC (permalink / raw) To: Ryan Olson; +Cc: 46713 Ryan Olson <ryan.olson.x@gmail.com> writes: > Repro steps: > 1. Open foo.js with emacs -Q --eval '(setq-default js-indent-level 2 > indent-tabs-mode nil)' foo.js > 2. Go to line 61 > 3. Delete brace at end of that line > 4. Save > 5. Add brace back > 6. Press RET > 7. Errors happen Thanks for the clear recipe. With it, I'm also seeing errors (in both Emacs 27 and 28): Debugger entered--Lisp error: (error "internal--syntax-propertize did not move syntax-pr...") backward-prefix-chars() back-to-indentation() current-left-margin() move-to-left-margin(nil t) #f(compiled-function () #<bytecode 0x155c01f42651>)() self-insert-command(1) newline(nil 1) funcall-interactively(newline nil 1) call-interactively(newline nil nil) But I'm not seeing the "binding depth" one. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#46713: 27.1; Variable binding depth exceeds max-specpdl-size in js-mode with js-indent-level 2 and indent-tabs-mode nil on new line 2021-02-23 15:36 ` Lars Ingebrigtsen @ 2021-02-23 16:31 ` Ryan Olson 2021-02-24 16:47 ` Lars Ingebrigtsen 2022-06-19 13:53 ` Lars Ingebrigtsen 1 sibling, 1 reply; 10+ messages in thread From: Ryan Olson @ 2021-02-23 16:31 UTC (permalink / raw) To: Lars Ingebrigtsen; +Cc: 46713 [-- Attachment #1: Type: text/plain, Size: 1264 bytes --] It was with something like this that I saw the error I reported. I’m not sure how to reproduce that. I guess we can instead fix this one (that _is_ reproducible)? On Tue, Feb 23, 2021 at 8:36 AM Lars Ingebrigtsen <larsi@gnus.org> wrote: > Ryan Olson <ryan.olson.x@gmail.com> writes: > > > Repro steps: > > 1. Open foo.js with emacs -Q --eval '(setq-default js-indent-level 2 > > indent-tabs-mode nil)' foo.js > > 2. Go to line 61 > > 3. Delete brace at end of that line > > 4. Save > > 5. Add brace back > > 6. Press RET > > 7. Errors happen > > Thanks for the clear recipe. With it, I'm also seeing errors (in both > Emacs 27 and 28): > > Debugger entered--Lisp error: (error "internal--syntax-propertize did not > move syntax-pr...") > backward-prefix-chars() > back-to-indentation() > current-left-margin() > move-to-left-margin(nil t) > #f(compiled-function () #<bytecode 0x155c01f42651>)() > self-insert-command(1) > newline(nil 1) > funcall-interactively(newline nil 1) > call-interactively(newline nil nil) > > But I'm not seeing the "binding depth" one. > > -- > (domestic pets only, the antidote for overdose, milk.) > bloggy blog: http://lars.ingebrigtsen.no > -- Sent from my iPhone [-- Attachment #2: Type: text/html, Size: 1932 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#46713: 27.1; Variable binding depth exceeds max-specpdl-size in js-mode with js-indent-level 2 and indent-tabs-mode nil on new line 2021-02-23 16:31 ` Ryan Olson @ 2021-02-24 16:47 ` Lars Ingebrigtsen 0 siblings, 0 replies; 10+ messages in thread From: Lars Ingebrigtsen @ 2021-02-24 16:47 UTC (permalink / raw) To: Ryan Olson; +Cc: 46713 Ryan Olson <ryan.olson.x@gmail.com> writes: > I guess we can instead fix this one (that _is_ reproducible)? Yup. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#46713: 27.1; Variable binding depth exceeds max-specpdl-size in js-mode with js-indent-level 2 and indent-tabs-mode nil on new line 2021-02-23 15:36 ` Lars Ingebrigtsen 2021-02-23 16:31 ` Ryan Olson @ 2022-06-19 13:53 ` Lars Ingebrigtsen 2022-06-25 12:03 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors 1 sibling, 1 reply; 10+ messages in thread From: Lars Ingebrigtsen @ 2022-06-19 13:53 UTC (permalink / raw) To: Ryan Olson; +Cc: 46713, Stefan Monnier Lars Ingebrigtsen <larsi@gnus.org> writes: > Thanks for the clear recipe. With it, I'm also seeing errors (in both > Emacs 27 and 28): > > Debugger entered--Lisp error: (error "internal--syntax-propertize did > not move syntax-pr...") > backward-prefix-chars() > back-to-indentation() > current-left-margin() > move-to-left-margin(nil t) > #f(compiled-function () #<bytecode 0x155c01f42651>)() > self-insert-command(1) > newline(nil 1) > funcall-interactively(newline nil 1) > call-interactively(newline nil nil) Perhaps Stefan knows what's going on here; added to the CCs. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#46713: 27.1; Variable binding depth exceeds max-specpdl-size in js-mode with js-indent-level 2 and indent-tabs-mode nil on new line 2022-06-19 13:53 ` Lars Ingebrigtsen @ 2022-06-25 12:03 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors 2022-06-25 12:43 ` Lars Ingebrigtsen 0 siblings, 1 reply; 10+ messages in thread From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-06-25 12:03 UTC (permalink / raw) To: Lars Ingebrigtsen; +Cc: Ryan Olson, 46713 > Perhaps Stefan knows what's going on here; added to the CCs. [ The recipe works without the js-indent-level and indent-tabs-mode settings. ] I think the crux of the matter is the following: (run-hook-wrapped 'syntax-propertize-extend-region-functions (lambda (f) (let ((new (funcall f start end)) ;; Avoid recursion! (syntax-propertize--done most-positive-fixnum)) (if (or (null new) (and (>= (car new) start) (<= (cdr new) end))) nil Where the binding of `syntax-propertize--done` should be around the call to `f` (apparently I introduced this bug in commit 3928ef2dd5b8febf3b1d9c1bfb22af3698d16bea). But the bug also shows that it's difficult for syntax-propertize-functions to know when they use `syntax-ppss` since it can happen as a side-effect of forward-sexp and hence I'm beginning to think it's not practical to require them to call `syntax-ppss-flush-cache` manually. I'm thinking of installing the patch below on `master`. We could install a simpler patch on `emacs-28` which just swaps the two vars in the above `let` (and changes it into a `let*`). WDYT? Stefan * lisp/emacs-lisp/syntax.el: Rework the handling of nested calls. Nested calls to `syntax-ppss` and `syntax-propertize` can easily happen unexpectedly via ondemand propertizing or `forward-sexp`. Refine the handling of nested calls so we detect them more reliably (e.g. also within `syntax-propertize-extend-region-functions`) and so that the `syntax-ppss` cache is automatically flushed in case it might have been filled with data that's become obsolete since. (syntax-propertize--inhibit-flush): Delete var. (syntax-propertize--in-process-p): New function to replace it. (syntax-ppss-flush-cache): Use it. (syntax-ppss--updated-cache): New var. (syntax-propertize): Make `syntax-propertize--done` binding apply to `syntax-propertize-extend-region-functions` as well, as intended (fixes bug#46713). Use `syntax-ppss--updated-cache` to flush syntax-ppss cache at the end when needed. Don't bind `syntax-propertize--inhibit-flush` any more. (syntax-ppss): Set `syntax-ppss--updated-cache` when applicable. diff --git a/lisp/emacs-lisp/syntax.el b/lisp/emacs-lisp/syntax.el index a4d7beade13..36b0c56e953 100644 --- a/lisp/emacs-lisp/syntax.el +++ b/lisp/emacs-lisp/syntax.el @@ -345,10 +345,16 @@ syntax-propertize-via-font-lock (defvar-local syntax-ppss-table nil "Syntax-table to use during `syntax-ppss', if any.") -(defvar-local syntax-propertize--inhibit-flush nil - "If non-nil, `syntax-ppss-flush-cache' only flushes the ppss cache. -Otherwise it flushes both the ppss cache and the properties -set by `syntax-propertize'") +(defun syntax-propertize--in-process-p () + "Non-nil if we're inside `syntax-propertize'. +This is used to avoid infinite recursion as well as to handle cases where +`syntax-ppss' is called when the final `syntax-table' properties have not +yet been setup, in which case we may end up putting invalid info into the cache. +It's also used so that `syntax-ppss-flush-cache' can be used from within +`syntax-propertize' without ruining the `syntax-table' already set." + (eq syntax-propertize--done most-positive-fixnum)) + +(defvar-local syntax-ppss--updated-cache nil) (defun syntax-propertize (pos) "Ensure that syntax-table properties are set until POS (a buffer point)." @@ -370,21 +376,24 @@ syntax-propertize (with-silent-modifications (with-syntax-table (or syntax-ppss-table (syntax-table)) (make-local-variable 'syntax-propertize--done) ;Just in case! + ;; Make sure we let-bind it only buffer-locally. + (make-local-variable 'syntax-ppss--updated-cache) (let* ((start (max (min syntax-propertize--done (point-max)) (point-min))) (end (max pos (min (point-max) (+ start syntax-propertize-chunk-size)))) (first t) - (repeat t)) + (repeat t) + (syntax-ppss--updated-cache nil)) (while repeat (setq repeat nil) (run-hook-wrapped 'syntax-propertize-extend-region-functions (lambda (f) - (let ((new (funcall f start end)) - ;; Avoid recursion! - (syntax-propertize--done most-positive-fixnum)) + ;; Bind `syntax-propertize--done' to avoid recursion! + (let* ((syntax-propertize--done most-positive-fixnum) + (new (funcall f start end))) (if (or (null new) (and (>= (car new) start) (<= (cdr new) end))) nil @@ -399,20 +408,26 @@ syntax-propertize ;; Flush ppss cache between the original value of `start' and that ;; set above by syntax-propertize-extend-region-functions. (syntax-ppss-flush-cache start) - ;; Move the limit before calling the function, so the function - ;; can use syntax-ppss. + ;; Move the limit before calling the function, so it's + ;; done in case of errors. (setq syntax-propertize--done end) ;; (message "syntax-propertizing from %s to %s" start end) (remove-text-properties start end '(syntax-table nil syntax-multiline nil)) - ;; Make sure we only let-bind it buffer-locally. - (make-local-variable 'syntax-propertize--inhibit-flush) - ;; Let-bind `syntax-propertize--done' to avoid infinite recursion! - (let ((syntax-propertize--done most-positive-fixnum) - ;; Let `syntax-propertize-function' call - ;; `syntax-ppss-flush-cache' without worries. - (syntax-propertize--inhibit-flush t)) - (funcall syntax-propertize-function start end))))))))) + ;; Bind `syntax-propertize--done' to avoid recursion! + (let ((syntax-propertize--done most-positive-fixnum)) + (funcall syntax-propertize-function start end) + (when syntax-ppss--updated-cache + ;; `syntax-ppss' was called and updated the cache while we + ;; were propertizing so we need to flush the part of the + ;; cache that may have been rendered out-of-date by the new + ;; properties. + ;; We used to require syntax-propertize-functions to do that + ;; manually when applicable, but nowadays the `syntax-ppss' + ;; cache can be updated by too many functions, so the author + ;; of the syntax-propertize-function may not be aware it + ;; can happen. + (syntax-ppss-flush-cache start)))))))))) ;;; Link syntax-propertize with syntax.c. @@ -487,10 +502,10 @@ syntax-ppss-narrow-start (define-obsolete-function-alias 'syntax-ppss-after-change-function #'syntax-ppss-flush-cache "27.1") -(defun syntax-ppss-flush-cache (beg &rest ignored) +(defun syntax-ppss-flush-cache (beg &rest _ignored) "Flush the cache of `syntax-ppss' starting at position BEG." ;; Set syntax-propertize to refontify anything past beg. - (unless syntax-propertize--inhibit-flush + (unless (syntax-propertize--in-process-p) (setq syntax-propertize--done (min beg syntax-propertize--done))) ;; Flush invalid cache entries. (dolist (cell (list syntax-ppss-wide syntax-ppss-narrow)) @@ -517,10 +532,16 @@ syntax-ppss-flush-cache (setcdr cell cache))) )) -;;; FIXME: Explain this variable. Currently only its last (5th) slot is used. -;;; Perhaps the other slots should be removed? +;; FIXME: Explain this variable. Currently only its last (5th) slot is used. +;; Perhaps the other slots should be removed? +;; This variable is only used when `syntax-begin-function' is used and +;; will hence be removed together with `syntax-begin-function'. (defvar syntax-ppss-stats - [(0 . 0) (0 . 0) (0 . 0) (0 . 0) (0 . 0) (2 . 2500)]) + [(0 . 0) (0 . 0) (0 . 0) (0 . 0) (0 . 0) (2 . 2500)] + "Statistics about which case is more/less frequent in `syntax-ppss'. +The 5th slot drives the heuristic to use `syntax-begin-function'. +The rest is only useful if you're interested in tweaking the algorithm.") + (defun syntax-ppss-stats () (mapcar (lambda (x) (condition-case nil @@ -658,6 +679,7 @@ syntax-ppss ;; populate the cache so we won't need to do it again soon. (t (syntax-ppss--update-stats 3 pt-min pos) + (setq syntax-ppss--updated-cache t) ;; If `pt-min' is too far, add a few intermediate entries. (while (> (- pos pt-min) (* 2 syntax-ppss-max-span)) @@ -692,6 +714,7 @@ syntax-ppss (push pair ppss-cache) (setcar ppss-cache pair))))))))) + (setq syntax-ppss--updated-cache t) (setq ppss-last (cons pos ppss)) (setcar cell ppss-last) (setcdr cell ppss-cache) ^ permalink raw reply related [flat|nested] 10+ messages in thread
* bug#46713: 27.1; Variable binding depth exceeds max-specpdl-size in js-mode with js-indent-level 2 and indent-tabs-mode nil on new line 2022-06-25 12:03 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-06-25 12:43 ` Lars Ingebrigtsen 2022-06-26 13:00 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors 0 siblings, 1 reply; 10+ messages in thread From: Lars Ingebrigtsen @ 2022-06-25 12:43 UTC (permalink / raw) To: Stefan Monnier; +Cc: Ryan Olson, 46713 Stefan Monnier <monnier@iro.umontreal.ca> writes: > I'm thinking of installing the patch below on `master`. We could > install a simpler patch on `emacs-28` which just swaps the two vars in > the above `let` (and changes it into a `let*`). > > WDYT? The fix on master sounds good, but we're just gearing up for 28.2 this weekend, so while the change looks innocuous, I'd rather hold off until after 28.2. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#46713: 27.1; Variable binding depth exceeds max-specpdl-size in js-mode with js-indent-level 2 and indent-tabs-mode nil on new line 2022-06-25 12:43 ` Lars Ingebrigtsen @ 2022-06-26 13:00 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors 0 siblings, 0 replies; 10+ messages in thread From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-06-26 13:00 UTC (permalink / raw) To: Lars Ingebrigtsen; +Cc: Ryan Olson, 46713 > The fix on master sounds good, but we're just gearing up for 28.2 this > weekend, so while the change looks innocuous, I'd rather hold off until > after 28.2. OK, pushed to `master`, Stefan ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2022-06-26 13:00 UTC | newest] Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-02-22 22:22 bug#46713: 27.1; Variable binding depth exceeds max-specpdl-size in js-mode with js-indent-level 2 and indent-tabs-mode nil on new line Ryan Olson 2021-02-22 22:36 ` Lars Ingebrigtsen 2021-02-23 2:03 ` Ryan Olson 2021-02-23 15:36 ` Lars Ingebrigtsen 2021-02-23 16:31 ` Ryan Olson 2021-02-24 16:47 ` Lars Ingebrigtsen 2022-06-19 13:53 ` Lars Ingebrigtsen 2022-06-25 12:03 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors 2022-06-25 12:43 ` Lars Ingebrigtsen 2022-06-26 13:00 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).