I find that Geiser can hang when Chicken variables defined as 'blobs' are queried with autodoc (by hovering the cursor over them). (Chicken's 'blobs' are unstructured blocks of memory.)
To reproduce: In a Geiser buffer running Chicken with autodoc switched on, eval the following two lines of code:
(import (chicken scheme))
(define foo (make-blob 8))
Then hover the cursor over this one:
foo
Emacs hangs, runs up to 100% cpu, and has to be sent a quit signal. Here's the stack trace I got from the quit signal:
Debugger entered--Lisp error: (quit)
geiser-syntax--read/next-token()
geiser-syntax--read/list()
geiser-syntax--read/list()
geiser-syntax--read()
geiser-syntax--read/list()
geiser-syntax--read/list()
geiser-syntax--read()
geiser-syntax--read/list()
geiser-syntax--read()
geiser-syntax--read-from-string("((foo (\"value\" . #${60d6c7cdda7f0000})))")
geiser-autodoc--show-signatures(((result "((foo (\"value\" . #${60d6c7cdda7f0000})))") (output . "")))
geiser-con--process-completed-request(((:id . 8) (:string . "(geiser-eval '#f '(geiser-autodoc '(foo)))") (:continuation . geiser-autodoc--show-signatures) (:buffer . #<buffer make_pointer_test.scm>) (:connection t (:filter . comint-output-filter) (:tq ((nil "\\(\n#[^;]*;[^:0-9]*:?[0-9]+> \\)" #1 . geiser-con--process-completed-request)) #<process Chicken REPL> . #<buffer tq-temp-Chicken REPL>) (:tq-filter lambda (p s) (geiser-con--tq-filter (quote ((...) #<process Chicken REPL> . #<buffer tq-temp-Chicken REPL>)) s)) (:eot . "\\(\n#[^;]*;[^:0-9]*:?[0-9]+> \\)") (:prompt . "#[^;]*;[^:0-9]*:?[0-9]+> ") (:debug-prompt) (:is-debugging) (:count . 8) (:completed . #<hash-table eql 0/65 0x17dcbb9>))) "((result \"((foo (\\\"value\\\" . #${60d6c7cdda7f0000})))\") (output . \"\"))\n#;12> ")
geiser-con--tq-filter((((nil "\\(\n#[^;]*;[^:0-9]*:?[0-9]+> \\)" ((:id . 8) (:string . "(geiser-eval '#f '(geiser-autodoc '(foo)))") (:continuation . geiser-autodoc--show-signatures) (:buffer . #<buffer make_pointer_test.scm>) (:connection t (:filter . comint-output-filter) (:tq . #1) (:tq-filter lambda (p s) (geiser-con--tq-filter ... s)) (:eot . "\\(\n#[^;]*;[^:0-9]*:?[0-9]+> \\)") (:prompt . "#[^;]*;[^:0-9]*:?[0-9]+> ") (:debug-prompt) (:is-debugging) (:count . 8) (:completed . #<hash-table eql 0/65 0x17dcbb9>))) . geiser-con--process-completed-request)) #<process Chicken REPL> . #<buffer tq-temp-Chicken REPL>) "((result \"((foo (\\\"value\\\" . #${60d6c7cdda7f0000})))\") (output . \"\"))\n#;12> ")
(lambda (p s) (geiser-con--tq-filter (quote (((nil "\\(\n#[^;]*;[^:0-9]*:?[0-9]+> \\)" ((:id . 8) (:string . "(geiser-eval '#f '(geiser-autodoc '(foo)))") (:continuation . geiser-autodoc--show-signatures) (:buffer . #<buffer make_pointer_test.scm>) (:connection t ... ... ... ... ... ... ... ... ...)) . geiser-con--process-completed-request)) #<process Chicken REPL> . #<buffer tq-temp-Chicken REPL>)) s))(#<process Chicken REPL> "((result \"((foo (\\\"value\\\" . #${60d6c7cdda7f0000})))\") (output . \"\"))\n#;12> ")
It's fine when autodoc is turned off, and in the Geiser repl.
Curiously, I found that it seems not to crash when the variable is called 'seq', but it does for every other name I tried. Don't ask me why.
I'm running Chicken 5.1.0, Geiser 20191022.1613, and Emacs 26.3.