Large Backtrace causes odd behavior
I'm currently trying to debug a rather insidious scheme program, which ends up generating a very large backtrace. When I load the file manually, there's no backtrace shown unless I enter the debugger and no issue occurs. However, if I attempt to load the buffer with geiser-load-current-buffer, I get a Stack overflow in regexp matcher error, then no output. It seems like the issue is that it's running the debugger prompt regexp against the entire backtrace. The prompt regexp is "debug> $\\|break> $\\|.+: $" for Chez.
Here is what (version) gives:
GNU Emacs 29.4 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.42, cairo version 1.18.0) of 2024-06-29, modified by Debian
Here is what the *Messages* buffer looks like:
Loading /path/to/scheme-source.scm ...
error in process filter: tq-queue-pop: Stack overflow in regexp matcher
error in process filter: Stack overflow in regexp matcher
Here is what the *Backtrace* buffer looks like when I turn toggle-debug-on-error:
Debugger entered--Lisp error: (error "Stack overflow in regexp matcher")
geiser-con--connection-update-debugging((t (:filter . comint-output-filter) (:tq ((nil "\\(\n\\(> \\)\\)\\|\\(\n\\(debug> $\\|break> $\\|.+: $\\)\\)" ((:id . 11) (:string . "((eval 'geiser:load-file (environment '(geiser))) ...") (:continuation . #f(compiled-function (s) #<bytecode 0xe2e74b06da7620d>)) (:buffer . #<buffer test-sets.scm>) (:connection . #1)) . geiser-con--process-completed-request) ("((eval 'geiser:ge:eval (environment '(geiser))) '#..." "\\(\n\\(> \\)\\)\\|\\(\n\\(debug> $\\|break> $\\|.+: $\\)\\)" ((:id . 12) (:string . "((eval 'geiser:ge:eval (environment '(geiser))) '#...") (:continuation . #f(compiled-function (s) #<bytecode -0x1434446891030fce>)) (:buffer . #<buffer *Geiser Chez REPL*>) (:connection . #1)) . geiser-con--process-completed-request)) #<process Chez REPL> . #<buffer tq-temp-Chez REPL>) (:tq-filter . #f(compiled-function (p s) #<bytecode 0x1d0119df9e0a97bb>)) (:eot . "\\(\n\\(> \\)\\)\\|\\(\n\\(debug> $\\|break> $\\|.+: $\\)\\)") (:prompt . "> ") (:debug-prompt . "debug> $\\|break> $\\|.+: $") (:is-debugging) (:count . 12) (:completed . #<hash-table eql 0/65 0x157f4af8ee33>)) "((result \"\") (output . \"Testing \\\"set equality\\\"\\n...")
geiser-con--has-entered-debugger((t (:filter . comint-output-filter) (:tq ((nil "\\(\n\\(> \\)\\)\\|\\(\n\\(debug> $\\|break> $\\|.+: $\\)\\)" ((:id . 11) (:string . "((eval 'geiser:load-file (environment '(geiser))) ...") (:continuation . #f(compiled-function (s) #<bytecode 0xe2e74b06da7620d>)) (:buffer . #<buffer test-sets.scm>) (:connection . #1)) . geiser-con--process-completed-request) ("((eval 'geiser:ge:eval (environment '(geiser))) '#..." "\\(\n\\(> \\)\\)\\|\\(\n\\(debug> $\\|break> $\\|.+: $\\)\\)" ((:id . 12) (:string . "((eval 'geiser:ge:eval (environment '(geiser))) '#...") (:continuation . #f(compiled-function (s) #<bytecode -0x1434446891030fce>)) (:buffer . #<buffer *Geiser Chez REPL*>) (:connection . #1)) . geiser-con--process-completed-request)) #<process Chez REPL> . #<buffer tq-temp-Chez REPL>) (:tq-filter . #f(compiled-function (p s) #<bytecode 0x1d0119df9e0a97bb>)) (:eot . "\\(\n\\(> \\)\\)\\|\\(\n\\(debug> $\\|break> $\\|.+: $\\)\\)") (:prompt . "> ") (:debug-prompt . "debug> $\\|break> $\\|.+: $") (:is-debugging) (:count . 12) (:completed . #<hash-table eql 0/65 0x157f4af8ee33>)) "((result \"\") (output . \"Testing \\\"set equality\\\"\\n...")
geiser-con--req-form(((:id . 11) (:string . "((eval 'geiser:load-file (environment '(geiser))) ...") (:continuation . #f(compiled-function (s) #<bytecode 0xe2e74b06da7620d>)) (:buffer . #<buffer test-sets.scm>) (:connection t (:filter . comint-output-filter) (:tq ((nil "\\(\n\\(> \\)\\)\\|\\(\n\\(debug> $\\|break> $\\|.+: $\\)\\)" #1 . geiser-con--process-completed-request) ("((eval 'geiser:ge:eval (environment '(geiser))) '#..." "\\(\n\\(> \\)\\)\\|\\(\n\\(debug> $\\|break> $\\|.+: $\\)\\)" ((:id . 12) (:string . "((eval 'geiser:ge:eval (environment '(geiser))) '#...") (:continuation . #f(compiled-function (s) #<bytecode -0x1434446891030fce>)) (:buffer . #<buffer *Geiser Chez REPL*>) (:connection . #7)) . geiser-con--process-completed-request)) #<process Chez REPL> . #<buffer tq-temp-Chez REPL>) (:tq-filter . #f(compiled-function (p s) #<bytecode 0x1d0119df9e0a97bb>)) (:eot . "\\(\n\\(> \\)\\)\\|\\(\n\\(debug> $\\|break> $\\|.+: $\\)\\)") (:prompt . "> ") (:debug-prompt . "debug> $\\|break> $\\|.+: $") (:is-debugging) (:count . 12) (:completed . #<hash-table eql 0/65 0x157f4af8ee33>))) "((result \"\") (output . \"Testing \\\"set equality\\\"\\n...")
geiser-con--process-completed-request(((:id . 11) (:string . "((eval 'geiser:load-file (environment '(geiser))) ...") (:continuation . #f(compiled-function (s) #<bytecode 0xe2e74b06da7620d>)) (:buffer . #<buffer test-sets.scm>) (:connection t (:filter . comint-output-filter) (:tq ((nil "\\(\n\\(> \\)\\)\\|\\(\n\\(debug> $\\|break> $\\|.+: $\\)\\)" #1 . geiser-con--process-completed-request) ("((eval 'geiser:ge:eval (environment '(geiser))) '#..." "\\(\n\\(> \\)\\)\\|\\(\n\\(debug> $\\|break> $\\|.+: $\\)\\)" ((:id . 12) (:string . "((eval 'geiser:ge:eval (environment '(geiser))) '#...") (:continuation . #f(compiled-function (s) #<bytecode -0x1434446891030fce>)) (:buffer . #<buffer *Geiser Chez REPL*>) (:connection . #7)) . geiser-con--process-completed-request)) #<process Chez REPL> . #<buffer tq-temp-Chez REPL>) (:tq-filter . #f(compiled-function (p s) #<bytecode 0x1d0119df9e0a97bb>)) (:eot . "\\(\n\\(> \\)\\)\\|\\(\n\\(debug> $\\|break> $\\|.+: $\\)\\)") (:prompt . "> ") (:debug-prompt . "debug> $\\|break> $\\|.+: $") (:is-debugging) (:count . 12) (:completed . #<hash-table eql 0/65 0x157f4af8ee33>))) "((result \"\") (output . \"Testing \\\"set equality\\\"\\n...")
geiser-con--tq-filter((((nil "\\(\n\\(> \\)\\)\\|\\(\n\\(debug> $\\|break> $\\|.+: $\\)\\)" ((:id . 11) (:string . "((eval 'geiser:load-file (environment '(geiser))) ...") (:continuation . #f(compiled-function (s) #<bytecode 0xe2e74b06da7620d>)) (:buffer . #<buffer test-sets.scm>) (:connection t (:filter . comint-output-filter) (:tq . #1) (:tq-filter . #f(compiled-function (p s) #<bytecode 0x1d0119df9e0a97bb>)) (:eot . "\\(\n\\(> \\)\\)\\|\\(\n\\(debug> $\\|break> $\\|.+: $\\)\\)") (:prompt . "> ") (:debug-prompt . "debug> $\\|break> $\\|.+: $") (:is-debugging) (:count . 12) (:completed . #<hash-table eql 0/65 0x157f4af8ee33>))) . geiser-con--process-completed-request) ("((eval 'geiser:ge:eval (environment '(geiser))) '#..." "\\(\n\\(> \\)\\)\\|\\(\n\\(debug> $\\|break> $\\|.+: $\\)\\)" ((:id . 12) (:string . "((eval 'geiser:ge:eval (environment '(geiser))) '#...") (:continuation . #f(compiled-function (s) #<bytecode -0x1434446891030fce>)) (:buffer . #<buffer *Geiser Chez REPL*>) (:connection t (:filter . comint-output-filter) (:tq . #1) (:tq-filter . #f(compiled-function (p s) #<bytecode 0x1d0119df9e0a97bb>)) (:eot . "\\(\n\\(> \\)\\)\\|\\(\n\\(debug> $\\|break> $\\|.+: $\\)\\)") (:prompt . "> ") (:debug-prompt . "debug> $\\|break> $\\|.+: $") (:is-debugging) (:count . 12) (:completed . #<hash-table eql 0/65 0x157f4af8ee33>))) . geiser-con--process-completed-request)) #<process Chez REPL> . #<buffer tq-temp-Chez REPL>) "(\"column\" . 2)) ((\"name\" . \"#<procedure at sets.sc...")
#f(compiled-function (p s) #<bytecode 0x1d0119df9e0a97bb>)(#<process Chez REPL> "(\"column\" . 2)) ((\"name\" . \"#<procedure at sets.sc...")
geiser-con--connection-deactivate((t (:filter . comint-output-filter) (:tq ((nil "\\(\n\\(> \\)\\)\\|\\(\n\\(debug> $\\|break> $\\|.+: $\\)\\)" ((:id . 11) (:string . "((eval 'geiser:load-file (environment '(geiser))) ...") (:continuation . #f(compiled-function (s) #<bytecode 0xe2e74b06da7620d>)) (:buffer . #<buffer test-sets.scm>) (:connection . #1)) . geiser-con--process-completed-request) ("((eval 'geiser:ge:eval (environment '(geiser))) '#..." "\\(\n\\(> \\)\\)\\|\\(\n\\(debug> $\\|break> $\\|.+: $\\)\\)" ((:id . 12) (:string . "((eval 'geiser:ge:eval (environment '(geiser))) '#...") (:continuation . #f(compiled-function (s) #<bytecode -0x1434446891030fce>)) (:buffer . #<buffer *Geiser Chez REPL*>) (:connection . #1)) . geiser-con--process-completed-request)) #<process Chez REPL> . #<buffer tq-temp-Chez REPL>) (:tq-filter . #f(compiled-function (p s) #<bytecode 0x1d0119df9e0a97bb>)) (:eot . "\\(\n\\(> \\)\\)\\|\\(\n\\(debug> $\\|break> $\\|.+: $\\)\\)") (:prompt . "> ") (:debug-prompt . "debug> $\\|break> $\\|.+: $") (:is-debugging) (:count . 12) (:completed . #<hash-table eql 0/65 0x157f4af8ee33>)))
geiser-repl--prepare-send()
geiser-repl--send-input()
geiser-repl-maybe-send()
funcall-interactively(geiser-repl-maybe-send)
command-execute(geiser-repl-maybe-send)
Edited by rvs314