[slime-devel] Re: Broken readtables
Alain.Picard at memetrics.com
Alain.Picard at memetrics.com
Thu Jun 17 08:56:58 UTC 2004
Luke Gorrie writes:
> Alain.Picard at memetrics.com writes:
>
> > I have a file which defines a readtable so I can type
> > things like #v(1 2). (Don't ask. :-)
> >
> > When I hit M-. to find any definition in this file, emacs
> > croaks and asks if I want to enter recursive edit. Saying
> > yes yields a SLDB buffer like this:
>
> The `with-standard-io-syntax' in dspec-stream-position looks
> suspicious to me (swank-lispworks.lisp). How about if you remove it?
>
If you remove it, it works. In fact, I think there are TWO bugs
in that function; I think that *read-eval* needs to be set to T.
I propose:
(defun dspec-stream-position (stream dspec)
(let ((*read-eval* t))
(loop (let* ((pos (file-position stream))
(form (read stream nil '#1=#:eof)))
(when (eq form '#1#)
(return nil))
(labels ((check-dspec (form)
(when (consp form)
(let ((operator (car form)))
(case operator
((progn)
(mapcar #'check-dspec
(cdr form)))
((eval-when locally macrolet symbol-macrolet)
(mapcar #'check-dspec
(cddr form)))
((in-package)
(let ((package (find-package (second form))))
(when package
(setq *package* package))))
(otherwise
(let ((form-dspec (dspec:parse-form-dspec form)))
(when (dspec:dspec-equal dspec form-dspec)
(return pos)))))))))
(check-dspec form))))))
in swank-lispworks.lisp.
Thanks!
More information about the slime-devel
mailing list