[slime-devel] CMUCL unicode strings breaks slime

Raymond Toy toy.raymond at gmail.com
Wed Oct 6 22:59:06 UTC 2010


On 10/6/10 11:51 AM, Helmut Eller wrote:
> * Raymond Toy [2010-10-06 12:27] writes:
> 
>>> For now option 2) is probably the simplest. 
>>
>> Ok.  Can you give some hints on where to start looking at this?
> 
> read-message and write-message in swank-rpc.lisp.

The following change seems to work.  I can now create a string with
characters outside the bmp and slime doesn't die.

CL-USER> (map 'string #'code-char '(55296 56320 81 82 83))
"𐀀QRS"

I don't know what the "proper" way to integrate this would be, though.
I'll need help with that.

Ray

#+cmu
(defun codepoint-length (string)
  "Return the number of code points in the string.  The string MUST be
  a valid UTF-16 string."
  (do ((len (length string))
       (index 0 (1+ index))
       (count 0 (1+ count)))
      ((>= index len)
       count)
    (multiple-value-bind (codepoint wide)
	(lisp:codepoint string index)
      (declare (ignore codepoint))
      (when wide (incf index)))))
#-cmu
(defun codepoint-length (string)
  (length string))

(defun write-message (message package stream)
  (let* ((string (prin1-to-string-for-emacs message package))
         (length (codepoint-length string)))
    (let ((*print-pretty* nil))
      (format stream "~6,'0x" length))
    (write-string string stream)
    (finish-output stream)))





More information about the slime-devel mailing list