signal errors on trying to subclass BUILT-IN-CLASSes, lp#861004
commitfe027d695f4a23cc05ac0a8a99bceec3a242d27f
authorChristophe Rhodes <csr21@cantab.net>
Tue, 29 Apr 2014 11:48:49 +0000 (29 12:48 +0100)
committerChristophe Rhodes <csr21@cantab.net>
Wed, 21 May 2014 06:59:19 +0000 (21 07:59 +0100)
treed9df06c3cc934b8fa5f8d02c5ae649281d739b2b
parent54ea3bf3b24c17f9b37c698ffdb52f7456e4bdc6
signal errors on trying to subclass BUILT-IN-CLASSes, lp#861004

Introduce a new "interposing" (in AMOP terms) SYSTEM-CLASS to hang
some functionality on, and make BUILT-IN-CLASS a subclass.  Most
of the specified functionality is common to both and implemented
in terms of SYSTEM-CLASS, but the error on subclassing is just for
BUILT-IN-CLASSES.  This therefore involves making the subclassable
System Classes, SEQUENCE and STREAM (and subclasses), be of metaclass
SYSTEM-CLASS rather than BUILT-IN-CLASS.  The bootstrap and braid need
to be adjusted accordingly.  Implement the validate-superclass error
in terms of a new invalid-superclass generic function (as suggested
by Nick Levine in preliminary work on this problem), and make the
invalid-superclass error a reference-condition so that we can defend
our implementation strategy.

This is yet another example of a bug tagged "easy" which involves
dealing with the PCL bootstrap.  Someone should do something about
this.
16 files changed:
package-data-list.lisp-expr
src/code/condition.lisp
src/pcl/boot.lisp
src/pcl/braid.lisp
src/pcl/defs.lisp
src/pcl/dfun.lisp
src/pcl/dlisp.lisp
src/pcl/early-low.lisp
src/pcl/generic-functions.lisp
src/pcl/low.lisp
src/pcl/methods.lisp
src/pcl/slots.lisp
src/pcl/std-class.lisp
src/pcl/wrapper.lisp
tests/clos.impure.lisp
tests/mop.impure.lisp