Home
Reading
Searching
Subscribe
Sponsors
Statistics
Posting
Contact
Spam
Lists
Links
About
Hosting
Filtering
Features Download
Marketing
Archives
FAQ
Blog
 
Gmane
From: Cyrus Harmon <ch-lisp <at> bobobeach.com>
Subject: named-readtables/SLIME interaction problem
Newsgroups: gmane.lisp.editors.hints.devel
Date: Thursday 27th January 2011 21:41:30 UTC (over 6 years ago)
I ran into a problem with SLIME where I was getting errors the second time
I would compile a buffer with contents such as the following:


(cl:eval-when (:compile-toplevel :load-toplevel :execute)
 (ql:quickload 'named-readtables))

(defpackage #:reader-macro-test
  (:use #:cl))

(in-package #:reader-macro-test)

(eval-when (:compile-toplevel :load-toplevel :execute)
  (named-readtables:defreadtable readtable-test
    (:merge :standard)))

(named-readtables:in-readtable readtable-test)


It turns out that the problem has to do with the way SLIME deals with the
style-warning that the defreadtable gives about overwriting the existing
readtable. The defreadtable form clears out the bindings for the existing
reader, then issues the warning. SLIME parses the buffer and picks up that
we're in the #:reader-macro-test package and sets *readtable* to be the
readtable that we've just clobbered and then in SLIMEs error/warning
handling code it further frobs (a copy of) the (now empty-ish) readtable
and then attempts to read using that readtable and fails.

Tobias rightly points out that SLIME should have better support for
named-readtables. It also seems to me that SLIME might want to make greater
assurances about the state of the reader in its error handling code.

But the simple, expedient fix is:

--- named-readtables.lisp	2011-01-27 09:14:38.000000000 -0800
+++
/Users/sly/quicklisp/dists/quicklisp/software/named-readtables-20101006-darcs/named-readtables.lisp	2011-01-27
13:36:53.000000000 -0800
@@ -132,9 +132,9 @@
               (cond ((not readtable)
                      (setq readtable (make-readtable ',name)))
                     (t
-                     (setq readtable (%clear-readtable readtable))
                      (simple-style-warn "Overwriting already existing
readtable ~S."
-                                        readtable)))
+                                        readtable)
+                     (setq readtable (%clear-readtable readtable))))
               ,@(loop for option in merge-clauses
                       collect (process-option option 'readtable))
               ,@(loop for option in case-clauses

Explicit SLIME support for named-readtables would be great, but, in the
meantime, it would be nice to see this in the named-readtables source.

Thanks,

Cyrus
 
CD: 3ms