[slime-devel] Problem with Swank and SBCL Unicode support?

Dave Roberts ldave at droberts.com
Tue Dec 21 20:46:23 UTC 2004


Just had SLIME explode quite magnificently for me. ;-)

Was playing around with TRIVIAL-SOCKETS on SBCL 0.8.17.24.

You'll need these simple definitions, in my case in foo.lisp:

(defun crlf (s)
  (write-char #\Return s)
  (write-char #\Newline s))

(defun http-get (site page)
  (with-open-stream (s (trivial-sockets:open-stream site 80))
    (format s "GET ~A HTTP/1.0" page) (crlf s)
    (format s "Host: ~A" site) (crlf s)
    (crlf s)
    (force-output s)
    (loop for line = (read-line s nil nil)
	 while line
	 do (format t "~A~%" line))))


Test case is pretty simple. Start SLIME. In the SLIME REPL:

CL-USER> (require :asdf)
NIL
CL-USER> (require :trivial-sockets)
NIL
CL-USER> (load "/home/dave/foo.lisp")
T
CL-USER> (http-get "www.cboe.com" "/")

<lots of output...>
<and then...>

debugger invoked on a TYPE-ERROR in thread 14342: The value 956 is not
of type (UNSIGNED-BYTE 8).

You can type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [ABORT   ] Abort handling SLIME request.
  1:            Reduce debugger level (leaving debugger, returning to
toplevel).
  2: [TOPLEVEL] Restart at toplevel READ/EVAL/PRINT loop.
(SB-IMPL::OUTPUT-BYTES/LATIN-1 5 #<FILE-STREAM for "a constant
string" {9829B21}> "(:debug 0 2 (\"The value 956 is not of type
(UNSIGNED-BYTE 8).\" \"   [Condition of type TYPE-ERROR]\" nil nil)
((\"ABORT\" \"Abort handling SLIME request.\") (\"ABORT\" \"Reduce
debugger level (leaving debugger, returning to toplevel).\") (\"TOPLEVEL
\" \"Restart at toplevel READ/EVAL/PRINT loop.\")) ((0 \"(SB-
IMPL::OUTPUT-BYTES/LATIN-1 5 #<FILE-STREAM for \\\"a constant string\\
\" {9829B21}> \\\"(:debug 0 1 (\\\\\\\"The value 956 is not of type
(UNSIGNED-BYTE 8).\\\\\\\" \\\\\\\"   [Condition of type TYPE-ERROR]\\\\
\\\" nil nil) ((\\\\\\\"ABORT\\\\\\\" \\\\\\\"Abort handling SLIME
request.\\\\\\\") (\\\\\\\"ABORT\\\\\\\" \\\\\\\"Reduce debugger level
(leaving debugger, returning to toplevel).\\\\\\\") (\\\\\\\"TOPLEVEL\\\
\\\\" \\\\\\\"Restart at toplevel READ/EVAL/PRINT loop.\\\\\\\")) ((0 \\
\\\\\"(SB-IMPL::OUTPUT-BYTES/LATIN-1 5 #<FILE-STREAM for \\\\\\\\\\\\\\
\"a constant string\\\\\\\\\\\\\\\" {9833569}> \\\\\\\\\\\\\\\"new

debugger invoked on a TYPE-ERROR in thread 14342: The value 956 is not
of type (UNSIGNED-BYTE 8).

You can type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [ABORT   ] Abort handling SLIME request.
  1:            Reduce debugger level (leaving debugger, returning to
toplevel).
  2: [TOPLEVEL] Restart at toplevel READ/EVAL/PRINT loop.


At this point, SLIME gets pretty confused. Any attempt at making any
forward progress (invoking any restarts, etc.) just results in more
problems (lands you right back in the debugger). At some point, Emacs
seems to get pretty confused, too.

I tried this on SBCL without using SLIME (repl in a term window) and it
seems to work fine. I'm guessing that there is some sort of problem with
Swank communicating with Emacs as it tries to relay the FORMAT output,
probably caused by something in the new SBCL Unicode support.

Note that you have to use the CBOE website (www.cboe.com) to trigger
this. There is something on that page (as simple as a character with the
high order bit set??) that triggers this. I have tried other sites and
they seem to work fine. I also replaced the (FORMAT T "~A~%" LINE) with
(FORMAT T "foo~%") and it prints "foo" very nicely for each line on the
web page and does not trigger the bug.

If there is a better place/method to file a bug report, let me know.
-- 
Dave Roberts <ldave at droberts.com>




More information about the slime-devel mailing list