I attach the following patch really to check that I've got the
specifics of the documentation for swank:*communication-style* nil
right. SBCL's win32 port is currently less featureful than its
functionality on Unix-like operating systems, but the current
developer CVS (sadly not yet its anoncvs) has enough socket support to
deal with *communication-style* nil, so (after Tim Ritchey) I've
hacked swank-sbcl into working there. I don't think I've changed the
operation on any other sbcl platform, but it's always possible I've
erred somewhere along the line.
Anyway, if people are happy with the documentation change I'll check
this in later today.
Cheers,
Christophe
Index: ChangeLog
===================================================================
RCS file: /project/slime/cvsroot/slime/ChangeLog,v
retrieving revision 1.879
diff -u -r1.879 ChangeLog
--- ChangeLog 1 Apr 2006 22:55:28 -0000 1.879
+++ ChangeLog 11 Apr 2006 23:25:19 -0000
@@ -1,3 +1,11 @@
+2006-04-12 Christophe Rhodes <csr21(a)cam.ac.uk>
+
+ * swank-sbcl.lisp (various): compatibility fixes and band-aids for
+ the win32 port that will be released as sbcl 0.9.12. Should have
+ no impact on operation on any other platform.
+
+ * doc/slime.texi: document the NIL communication-style.
+
2006-04-01 Matthew D. Swank <akopa(a)charter.net>
* slime.el (slime-fontify-string): Use set-text-properties, not
Index: swank-sbcl.lisp
===================================================================
RCS file: /project/slime/cvsroot/slime/swank-sbcl.lisp,v
retrieving revision 1.153
diff -u -r1.153 swank-sbcl.lisp
--- swank-sbcl.lisp 22 Mar 2006 16:40:01 -0000 1.153
+++ swank-sbcl.lisp 11 Apr 2006 23:25:19 -0000
@@ -16,6 +16,7 @@
(eval-when (:compile-toplevel :load-toplevel :execute)
(require 'sb-bsd-sockets)
(require 'sb-introspect)
+ #-win32
(require 'sb-posix))
(declaim (optimize (debug 2)))
@@ -32,11 +33,15 @@
;;; TCP Server
(defimplementation preferred-communication-style ()
- (if (and (member :sb-thread *features*)
- #+linux
- (not (sb-alien:extern-alien "linux_no_threads_p" sb-alien:boolean)))
- :spawn
- :fd-handler))
+ (cond
+ ;; to be improved when Win32 support for serve-event or threads is
+ ;; present.
+ ((member :win32 *features*) nil)
+ ((and (member :sb-thread *features*)
+ #+linux
+ (not (sb-alien:extern-alien "linux_no_threads_p" sb-alien:boolean)))
+ :spawn)
+ (t :fd-handler)))
(defun resolve-hostname (name)
(car (sb-bsd-sockets:host-ent-addresses
@@ -78,8 +83,12 @@
(sigio-handler signal code scp))))
(defun enable-sigio-on-fd (fd)
- (sb-posix::fcntl fd sb-posix::f-setfl sb-posix::o-async)
- (sb-posix::fcntl fd sb-posix::f-setown (getpid)))
+ #+win32
+ (error "~S unsupported on this platform" 'enable-sigio-on-fd)
+ #-win32
+ (progn
+ (sb-posix::fcntl fd sb-posix::f-setfl sb-posix::o-async)
+ (sb-posix::fcntl fd sb-posix::f-setown (getpid))))
(defimplementation add-sigio-handler (socket fn)
(set-sigio-handler)
@@ -139,6 +148,10 @@
(sb-sys:without-interrupts (funcall fn)))
(defimplementation getpid ()
+ ;; FIXME
+ #+win32
+ (sb-unix:unix-getpid)
+ #-win32
(sb-posix:getpid))
(defimplementation lisp-implementation-type-name ()
Index: doc/slime.texi
===================================================================
RCS file: /project/slime/cvsroot/slime/doc/slime.texi,v
retrieving revision 1.44
diff -u -r1.44 slime.texi
--- doc/slime.texi 3 Mar 2006 15:03:31 -0000 1.44
+++ doc/slime.texi 11 Apr 2006 23:25:19 -0000
@@ -1415,6 +1415,11 @@
The available communication styles are:
@table @code
+@item NIL
+This style is the simplest of all: Lisp simply executes a loop, serving
+@SLIME{} protocol requests. The simplicity means that the Lisp cannot do
+any other processing while under @SLIME{}'s control.
+
@item :FD-HANDLER
This style uses the classical Unix-style ``@code{select()}-loop.''
Swank registers the communication socket with an event-dispatching
@@ -1446,8 +1451,8 @@
The default request handling style is chosen according to the
capabilities your Lisp system. The general order of preference is
-@code{:SPAWN}, then @code{:SIGIO}, then @code{:FD-HANDLER}. You can
-check the default style by calling
+@code{:SPAWN}, then @code{:SIGIO}, then @code{:FD-HANDLER}, with
+@code{NIL} as a last resort. You can check the default style by calling
@code{SWANK-BACKEND:PREFERRED-COMMUNICATION-STYLE}. You can also
override the default by setting @code{SWANK:*COMMUNICATION-STYLE*} in
your Swank init file.