Update of /cvsroot/sbcl/sbcl
In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv32733
NEWS package-data-list.lisp-expr version.lisp-expr
184.108.40.206: Improve user-subclassed SB-MOP:SPECIALIZER support
In order to support surface syntax for users in DEFMETHOD,
define and bootstrap a new SB-PCL:MAKE-METHOD-SPECIALIZERS-FORM
(a bit like SB-MOP:MAKE-METHOD-LAMBDA). This or something like
it is fundamentally necessary to support EQL specializers, which
as syntax have a bit which is syntax and a bit which is
evaluated in the lexical environment of the DEFMETHOD form.
Bootstrapping it is a little tedious, but (eventually) work out
where parsed specializers can be made and where we don't yet
have FIND-CLASS in the bootstrap. In the course of that, note
that we need to be able to parse and unparse specializers at
runtime: parsing to support FIND-METHOD; unparsing to get nice
names for our method functions in backtraces. Define an
experimental interface for that, too (see NEWS).
In the process, fix a couple of bugs in NO-NEXT-METHOD handling;
it is not safe to assume that the compile-time method name can
be used to find the method object. Instead, fight a little bit
with the file compiler to have a cons cell shared between the
method function and the method initargs, and arrange to have the
cell's CAR be set to the method once it is created; then we can
do NO-NEXT-METHOD sanely.
Tests for the no-next-method stuff, and adjust wonky find-method
specializer arguments in other tests.
RCS file: /cvsroot/sbcl/sbcl/NEWS,v
retrieving revision 1.1205
retrieving revision 1.1206
diff -u -d -r1.1205 -r1.1206
--- NEWS 30 May 2007 13:55:59 -0000 1.1205
+++ NEWS 2 Jun 2007 09:04:10 -0000 1.1206
@@ -1,5 +1,12 @@
;;;; -*- coding: utf-8; -*-
changes in sbcl-1.0.7 relative to sbcl-1.0.6:
+ * MOP improvement: support for user-defined subclasses of
+ SB-MOP:SPECIALIZER has been enhanced. The experimental interface
+ function SB-PCL:MAKE-METHOD-SPECIALIZERS-FORM, called as part of
+ the expansion of DEFMETHOD, is responsible for generating a form
+ which creates a list of specializers when evaluated. Additional
+ functions SB-PCL:[UN]PARSE-SPECIALIZER-USING-CLASS provide
+ debugging and introspective support.
* minor incompatible change: the (unsupported) spinlock interface
has changed: free spinlock now has the value NIL, and a held spinlock
has the owning thread as its value.
RCS file: /cvsroot/sbcl/sbcl/package-data-list.lisp-expr,v
retrieving revision 1.405
retrieving revision 1.406
diff -u -d -r1.405 -r1.406
--- package-data-list.lisp-expr 29 May 2007 14:36:23 -0000 1.405
+++ package-data-list.lisp-expr 2 Jun 2007 09:04:14 -0000 1.406
@@ -1787,6 +1787,10 @@
guaranteed to be present in later versions of SBCL. Use of this
package is deprecated in favour of SB-MOP."
:use ("CL" "SB!MOP" "SB!INT" "SB!EXT" "SB!WALKER" "SB!KERNEL")
+ ;; experimental SBCL-only (for now) symbols
+ :export ("MAKE-METHOD-SPECIALIZERS-FORM"
;; FIXME: After a little while, these reexports can probably go
;; away, as they're superseded by the use of SB-MOP as the
;; publically-accessible package.
RCS file: /cvsroot/sbcl/sbcl/version.lisp-expr,v
retrieving revision 1.3435
retrieving revision 1.3436
diff -u -d -r1.3435 -r1.3436
--- version.lisp-expr 1 Jun 2007 17:51:53 -0000 1.3435
+++ version.lisp-expr 2 Jun 2007 09:04:14 -0000 1.3436
@@ -17,4 +17,4 @@
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)