[slime-devel] swank-compile-string and xref info in Allegro

Matthew Danish mrd+nospam at cmu.edu
Wed Aug 18 09:26:12 UTC 2004


Using the syntax "buffer-name:position" under Allegro/Win32 seems to
be causing all sorts of interesting namestring parsing issues,
rending slime-compile-defun useless (among other things).  I have changed
the syntax to "buffer-name;position".  Still a hack, but it works.

Index: swank-allegro.lisp
===================================================================
RCS file: /project/slime/cvsroot/slime/swank-allegro.lisp,v
retrieving revision 1.49
diff -u -r1.49 swank-allegro.lisp
--- swank-allegro.lisp	4 Aug 2004 17:17:55 -0000	1.49
+++ swank-allegro.lisp	17 Aug 2004 21:03:45 -0000
@@ -241,7 +241,7 @@
 
 (defimplementation swank-compile-string (string &key buffer position)
   ;; We store the source buffer in excl::*source-pathname* as a string
-  ;; of the form <buffername>:<start-offset>.  Quite ugly encoding, but
+  ;; of the form <buffername>;<start-offset>.  Quite ugly encoding, but
   ;; the fasl file is corrupted if we use some other datatype.
   (with-compilation-hooks ()
     (let ((*buffer-name* buffer)
@@ -252,7 +252,7 @@
                `(in-package ,(package-name *package*))
                `(eval-when (:compile-toplevel :load-toplevel)
                  (setq excl::*source-pathname*
-                  (format nil "~A:~D" ',buffer ',position)))
+                  (format nil "~A;~D" ',buffer ',position)))
                string)))))
 
 ;;;; Definition Finding
@@ -275,18 +275,21 @@
       ((member :top-level)
        (list :error (format nil "Defined at toplevel: ~A" (fspec->string fspec))))
       (string
-       (let ((pos (position #\: file)))
+       (let ((pos (position #\; file :from-end t)))
          (make-location
           (list :buffer (subseq file 0 pos))
           (list :position (parse-integer (subseq file (1+ pos)))))))
       (null 
        (list :error (format nil "Unknown source location for ~A" (fspec->string fspec)))))))
 
-(defun fspec->string (fspec &aux (*package* (find-package :keyword)))
+(defun fspec->string (fspec)
   (etypecase fspec
-    (symbol (prin1-to-string fspec))
-    (list (format nil "(method ~A)" 
-                  (prin1-to-string (second fspec))))))
+    (symbol (let ((*package* (find-package :keyword)))
+              (prin1-to-string fspec)))
+    (list (format nil "(~A ~A)"
+                  (prin1-to-string (first fspec))
+                  (let ((*package* (find-package :keyword)))
+                    (prin1-to-string (second fspec)))))))
 
 (defun fspec-definition-locations (fspec)
   (let ((defs (excl::find-multiple-definitions fspec)))


-- 
;;;; Matthew Danish -- user: mrd domain: cmu.edu
;;;; OpenPGP public key: C24B6010 on keyring.debian.org





More information about the slime-devel mailing list