branch: elpa/slime
commit 3247e0d8e6bb94b80f02d30e6ec9629270eaaa3f
Author: Stas Boukarev <[email protected]>
Commit: Stas Boukarev <[email protected]>

    Better handling of sbcl sources.
    
    Add +internal-features+ to *features*.
    Read $ as floats.
---
 swank/sbcl.lisp | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/swank/sbcl.lisp b/swank/sbcl.lisp
index 358bd2cfca..eadf646028 100644
--- a/swank/sbcl.lisp
+++ b/swank/sbcl.lisp
@@ -400,14 +400,13 @@
  (values))
 
 (defvar *shebang-readtable*
-  (let ((*readtable* (copy-readtable nil)))
+  (let ((readtable (copy-readtable nil)))
     (set-dispatch-macro-character #\# #\!
                                   (lambda (s c n) (shebang-reader s c n))
-                                  *readtable*)
-    *readtable*))
-
-(defun shebang-readtable ()
-  *shebang-readtable*)
+                                  readtable)
+    ;; Cross-floats
+    (set-macro-character #\$ (lambda (stream char) (values)) nil readtable)
+    readtable))
 
 (defun sbcl-package-p (package)
   (let ((name (package-name package)))
@@ -420,15 +419,18 @@
 
 (defun guess-readtable-for-filename (filename)
   (if (sbcl-source-file-p filename)
-      (shebang-readtable)
+      *shebang-readtable*
       *readtable*))
 
 (defvar *debootstrap-packages* t)
 
 (defun call-with-debootstrapping (fun)
-  (handler-bind ((sb-int:bootstrap-package-not-found
-                  #'sb-int:debootstrap-package))
-    (funcall fun)))
+  (let ((*features* (append *features*
+                            #+#.(swank/backend:with-symbol 
'+internal-features+ 'sb-impl)
+                            sb-impl:+internal-features+)))
+    (handler-bind ((sb-int:bootstrap-package-not-found
+                     #'sb-int:debootstrap-package))
+      (funcall fun))))
 
 (defmacro with-debootstrapping (&body body)
   `(call-with-debootstrapping (lambda () ,@body)))
@@ -441,7 +443,7 @@
          (funcall fn))))
 
 (defimplementation default-readtable-alist ()
-  (let ((readtable (shebang-readtable)))
+  (let ((readtable *shebang-readtable*))
     (loop for p in (remove-if-not #'sbcl-package-p (list-all-packages))
           collect (cons (package-name p) readtable))))
 

Reply via email to