Subject: bug#57207: 29.0.50; Fontification is slow after e7b5912b23 (Improvements to long lines handling)

From: Ihor Radchenko <[email-masked]>
Date: Wed, 24 Aug 2022 16:08:32 +0800

With the latest master, the fontification gets completely broken.

IDK if it is related to this specific patch, but I got the following
redisplay backtrace.
Note that org-element--parse-objects has the following:

  (save-excursion
    (save-restriction
      (narrow-to-region beg end)
      (goto-char (point-min))
      (let (next-object contents)
(while (and (not (eobp))
   (setq next-object (org-element--object-lex restriction)))

The infinite recursion did not happen on the same Org file in the past. So,
it is not an issue with logic. Most likely, there is something about
narrowing/point movement that is very wrong on Emacs master.

(Another oddity is https://list.orgmode.org/87y1vf2zbe.fsf@localhost/T/#t)

Error: excessive-lisp-nesting nil
  debug-early-backtrace()
  debug-early(error (excessive-lisp-nesting))
  rx--parse-any((space 45 40 39 34 123))
  rx--translate-any(nil (space 45 40 39 34 123))
  rx--translate-form((any space 45 40 39 34 123))
  rx--translate((any space 45 40 39 34 123))
  #<subr F616e6f6e796d6f75732d6c616d626461_anonymous_lambda_2>((any space
45 40 39 34 123))
  mapcan(#<subr F616e6f6e796d6f75732d6c616d626461_anonymous_lambda_2> ((any
space 45 40 39 34 123)))
  rx--translate-or((line-start (any space 45 40 39 34 123)))
  rx--translate-form((or line-start (any space 45 40 39 34 123)))
  rx--translate((or line-start (any space 45 40 39 34 123)))
  rx--translate-seq(((or line-start (any space 45 40 39 34 123)) "*" (not
space)))
  rx--translate-form((seq (or line-start (any space 45 40 39 34 123)) "*"
(not space)))
  rx--translate((seq (or line-start (any space 45 40 39 34 123)) "*" (not
space)))
  rx-to-string((seq (or line-start (any space 45 40 39 34 123)) "*" (not
space)))
  org-element--parse-generic-emphasis("*" bold)
  org-element-bold-parser()
  org-element--object-lex((bold citation code entity export-snippet
footnote-reference inline-babel-call inline-src-block italic line-break
latex-fragment link macro radio-target statistics-cookie strike-through
subscript superscript target timestamp underline verbatim))
--- (line repeated 100s of times) ----
  org-element--parse-objects(5 54 (bold (:begin 4 :end 55 :post-blank 0
:contents-begin 5 :contents-end 54 :parent (bold (:begin 4 :end 55
:post-blank 0 :contents-begin 5 :contents-end 54 :parent (bold (:begin 4
:end 55 :post-blank 0 :contents-begin 5 :contents-end 54 :parent (bold
(:begin 4 :end 55 :post-blank 0 :contents-begin 5 :contents-end 54 :parent
(bold (:begin 4 :end 55 :post-blank 0 :contents-begin 5 :contents-end 54
:parent ( (bold citation code entity export-snippet footnote-reference
inline-babel-call inline-src-block italic line-break latex-fragment link
macro radio-target statistics-cookie strike-through subscript superscript
target timestamp underline verbatim))
  org-element--parse-objects(5 54 (bold (:begin 4 :end 55 :post-blank 0
:contents-begin 5 :contents-end 54 :parent (bold (:begin 4 :end 55
:post-blank 0 :contents-begin 5 :contents-end 54 :parent (bold (:begin 4
:end 55 :post-blank 0 :contents-begin 5 :contents-end 54 :parent (bold
(:begin 4 :end 55 :post-blank 0 :contents-begin 5 :contents-end 54 :parent
(bold (:begin 4 :end 55 :post-blank 0 :contents-begin 5 :contents-end
54)))))))))) (bold citation code entity export-snippet footnote-reference
inline-babel-call inline-src-block italic line-break latex-fragment link
macro radio-target statistics-cookie strike-through subscript superscript
target timestamp underline verbatim))
  org-element--parse-objects(5 54 (bold (:begin 4 :end 55 :post-blank 0
:contents-begin 5 :contents-end 54 :parent (bold (:begin 4 :end 55
:post-blank 0 :contents-begin 5 :contents-end 54 :parent (bold (:begin 4
:end 55 :post-blank 0 :contents-begin 5 :contents-end 54 :parent (bold
(:begin 4 :end 55 :post-blank 0 :contents-begin 5 :contents-end 54))))))))
(bold citation code entity export-snippet footnote-reference
inline-babel-call inline-src-block italic line-break latex-fragment link
macro radio-target statistics-cookie strike-through subscript superscript
target timestamp underline verbatim))
  org-element--parse-objects(5 54 (bold (:begin 4 :end 55 :post-blank 0
:contents-begin 5 :contents-end 54 :parent (bold (:begin 4 :end 55
:post-blank 0 :contents-begin 5 :contents-end 54 :parent (bold (:begin 4
:end 55 :post-blank 0 :contents-begin 5 :contents-end 54)))))) (bold
citation code entity export-snippet footnote-reference inline-babel-call
inline-src-block italic line-break latex-fragment link macro radio-target
statistics-cookie strike-through subscript superscript target timestamp
underline verbatim))
  org-element--parse-objects(5 54 (bold (:begin 4 :end 55 :post-blank 0
:contents-begin 5 :contents-end 54 :parent (bold (:begin 4 :end 55
:post-blank 0 :contents-begin 5 :contents-end 54)))) (bold citation code
entity export-snippet footnote-reference inline-babel-call inline-src-block
italic line-break latex-fragment link macro radio-target statistics-cookie
strike-through subscript superscript target timestamp underline verbatim))
  org-element--parse-objects(5 54 (bold (:begin 4 :end 55 :post-blank 0
:contents-begin 5 :contents-end 54)) (bold citation code entity
export-snippet footnote-reference inline-babel-call inline-src-block italic
line-break latex-fragment link macro radio-target statistics-cookie
strike-through subscript superscript target timestamp underline verbatim))
  org-element--parse-objects(242 246 nil (bold citation code entity
export-snippet footnote-reference inline-babel-call inline-src-block italic
latex-fragment link macro radio-target statistics-cookie strike-through
subscript superscript target timestamp underline verbatim) (headline
(:raw-value "Home" :begin 240 :end 13776 :pre-blank 358 :contents-begin 264
:contents-end 13776 :robust-begin 266 :robust-end 13774 :level 1 :priority
nil :tags (#("COMMON" 0 6 (fontified t)) #("NOCLOCK" 0 7 (fontified t)))
:todo-keyword nil :todo-type nil :post-blank 359 :footnote-section-p nil
:archivedp nil :commentedp nil :post-affiliated 240 :parent nil :structure
nil :deferred org-element-headline-parser--deferred)))
  org-element-headline-parser(327004 nil)
  org-element--current-element(327004 object nil nil)
  org-element--parse-elements(240 327004 nil nil object nil nil
no-recursion)
  org-element-parse-element((headline (:raw-value #1="Home" :begin 240 :end
327004 :pre-blank 0 :contents-begin 264 :contents-end 326998 :robust-begin
356 :robust-end 326996 :level 1 :priority nil :tags ("COMMON" "NOCLOCK")
:todo-keyword nil :todo-type nil :post-blank 2 :footnote-section-p nil
:archivedp nil :commentedp nil :post-affiliated 240 :parent #2=(org-data
(:begin 1 :contents-begin 1 :contents-end 326998 :end 327004 :robust-begin
123 :robust-end 326996 :post-blank 2 :post-affiliated 1 :path
"/home/yantar92/Org/TODO.org" :mode org-data :ID
"157580d6-61cc-4541-bf5c-46a1dbf25b13" :CATEGORY "TODO" :cached t
:org-element--cache-sync-key nil)) :structure nil :deferred nil :title #1#
:mode nil :granularity element :org-element--cache-sync-key nil :cached t
:ID "2489bdb2-054e-4dc1-97d6-3298c70b742a" :ORG-TIME-BALANCE-MULTIPLIER "1"
:fragile-cache #<hash-table equal 2/65 0x1ffb2d613ec3>)) object nil
no-recursion)
  org-font-lock-matcher(1542)
  font-lock-fontify-keywords-region(1 1542 nil)
  font-lock-default-fontify-region(1 1501 nil)
  font-lock-fontify-region(1 1501)
  #f(compiled-function (fun) #<bytecode
-0x156e7c74145e6b83>)(font-lock-fontify-region)
  jit-lock--run-functions(1 1501)
  jit-lock-fontify-now(1 1501)
  jit-lock-function(1)
  redisplay_internal\ \(C\ function\)()

On Tue, Aug 23, 2022 at 11:53 PM Gregory Heytings <[email-masked]>
wrote:

>
> >> Eli, do you have any objections about that patch (which replaces MODIFF
> >> with CHARS_MODIFF in the long lines detection code), or can I push it
> >> to master?
> >
> > No objections.
> >
>
> Thanks, now done.
>