[slime-devel] make Slime recognize file-compile failures on SBCL

Andreas Fuchs asf at boinkor.net
Mon Jul 19 21:32:58 UTC 2004


Hi,

currently, using slime with SBCL isn't very satisfying when you're
fond of the C-c C-k function: if you compile the file and it contains
read errors, SLIME will think the file compiled ok and try to load it.

This fix requires a recent SBCL (as of 0.8.12.39), but it does this:

When the file-compiler aborts, it catches the error, and presents it
in the *compiler notes* (or whatever it's called today) buffer; it
will not try to load the resulting FASL file. The SBCL file compiler
aborts as soon as it hits a reader error; so the note output is not
really correct. SLIME users should then feel encouraged to fix the
reader error(s) and re-try compilation.

Does that make sense? Then this patch is for you:

Index: README
===================================================================
RCS file: /project/slime/cvsroot/slime/README,v
retrieving revision 1.10
diff -u -r1.10 README
--- README      16 Jul 2004 23:44:36 -0000      1.10
+++ README      19 Jul 2004 21:26:36 -0000
@@ -12,7 +12,7 @@
 
   In Emacs Lisp:
 
-    (add-to-list 'load-path "/the/path/to/this/directory")
+    (add-to-list 'load-path "/home/asf/dl/cvs/slime")
     (require 'slime)
     (setup-slime)
 
Index: swank-sbcl.lisp
===================================================================
RCS file: /project/slime/cvsroot/slime/swank-sbcl.lisp,v
retrieving revision 1.95
diff -u -r1.95 swank-sbcl.lisp
--- swank-sbcl.lisp     13 Jul 2004 18:14:03 -0000      1.95
+++ swank-sbcl.lisp     19 Jul 2004 21:26:37 -0000
@@ -168,6 +168,11 @@
       (setq *previous-compiler-condition* condition)
       (signal-compiler-condition condition context))))
 
+(defun handle-file-compiler-termination (condition)
+  "Handle a condition that caused the file compiler to terminate."
+  (handle-notification-condition
+   (sb-int:encapsulated-condition condition)))
+
 (defun signal-compiler-condition (condition context)
   (signal (make-condition
            'compiler-condition
@@ -176,7 +181,8 @@
                        (sb-c:compiler-error  :error)
                        (sb-ext:compiler-note :note)
                        (style-warning        :style-warning)
-                       (warning              :warning))
+                       (warning              :warning)
+                       (error                :error))
            :short-message (brief-compiler-message-for-emacs condition)
            :references
            ;; FIXME: delete the reader conditionaloid after sbcl
@@ -278,7 +284,8 @@
 
 (defimplementation call-with-compilation-hooks (function)
   (declare (type function function))
-  (handler-bind ((sb-c:compiler-error  #'handle-notification-condition)
+  (handler-bind ((sb-c:fatal-compiler-error #'handle-file-compiler-termination)
+                 (sb-c:compiler-error  #'handle-notification-condition)
                  (sb-ext:compiler-note #'handle-notification-condition)
                  (style-warning        #'handle-notification-condition)
                  (warning              #'handle-notification-condition))
@@ -287,13 +294,12 @@
 (defvar *trap-load-time-warnings* nil)
 
 (defimplementation swank-compile-file (filename load-p)
-  (flet ((loadit (fasl-file) (when (and load-p fasl-file) (load fasl-file))))
-    (cond (*trap-load-time-warnings*
-           (with-compilation-hooks ()
-             (loadit (compile-file filename))))
-          (t
-           (loadit (with-compilation-hooks () 
-                     (compile-file filename)))))))
+  (handler-case
+      (let ((output-file (with-compilation-hooks ()
+                           (compile-file filename))))
+        (when (and load-p output-file)
+          (load output-file)))
+    (sb-c:fatal-compiler-error () nil)))
 
 (defimplementation swank-compile-string (string &key buffer position)
   (let ((form (read-from-string (format nil "(~S () ~A)" 'lambda string))))

Have fun,
-- 
Andreas Fuchs, <asf at boinkor.net>, asf at jabber.at, antifuchs





More information about the slime-devel mailing list