1.0.6.12: Improve user-subclassed SB-MOP:SPECIALIZER support
authorChristophe Rhodes <csr21@cantab.net>
Sat, 2 Jun 2007 09:04:10 +0000 (09:04 +0000)
committerChristophe Rhodes <csr21@cantab.net>
Sat, 2 Jun 2007 09:04:10 +0000 (09:04 +0000)
commit990728854b8ba017888811d1b0453b15dfa8a581
treef7ee375ebe92b2fa737b4315fc2117956935f3d2
parent4f7c5ad9f9ef93c149ed4e45d4dce696863d324f
1.0.6.12: 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.
16 files changed:
NEWS
contrib/sb-introspect/sb-introspect.lisp
package-data-list.lisp-expr
src/code/late-condition.lisp
src/code/ntrace.lisp
src/pcl/boot.lisp
src/pcl/defs.lisp
src/pcl/describe.lisp
src/pcl/env.lisp
src/pcl/fixup.lisp
src/pcl/generic-functions.lisp
src/pcl/methods.lisp
src/pcl/print-object.lisp
src/pcl/slots-boot.lisp
tests/clos-1.impure.lisp
version.lisp-expr