Commit [0aecc2] Maximize Restore History

0.9.4.54:

Declassification of INSTANCE and FUNCALLABLE-INSTANCE.

It turns out that the classes INSTANCE and
FUNCALLABLE-INSTANCE, as expressed in instance-pointer-lowtag
and funcallable-instance-widetag, are incompatible with the
MOP's notion of classes: the types INSTANCE and
FUNCALLABLE-INSTANCE are necessarily disjoint (no instance can
have a widetag of anything other than instance-header-widetag),
but FUNCALLABLE-STANDARD-OBJECT is required to be a subclass of
STANDARD-OBJECT, and must therefore have the superclasses of
STANDARD-OBJECT among its superclasses. If INSTANCE is one of
those, FUNCALLABLE-INSTANCE cannot be, so F-S-Os would not be of
type FUNCALLABLE-INSTANCE (which is wrong); if it is not one of
those, then ordinary S-Os would not be of type INSTANCE (which
is wrong). CMUCL, at the time of writing, exhibits type system
confusion in this area, as demonstrated by CSR cmucl-imp
2005-09-0x).

So, we need to do something else; probably most straightforward
to make INSTANCE and FUNCALLABLE-INSTANCE named types, as they
are of the same order of specialness as e.g. T -- not quite as
special, but almost. Some hacking later...

... the usual type system dance. Play whack-a-mole with test
failures and compilation failures until they all go
away. Primtype, class, typetran, and so on are
fiddled with.
... somewhat hacky code for determining when a class is subtypep
instance / funcallable-instance.
... different hard-coded constants for genesis; don't make a
special instance-layout, because the instance class is
gone.
... just to prove we've achieved something, make STANDARD-OBJECT
a superclass of FUNCALLABLE-STANDARD-OBJECT.
(Supporting METAOBJECT should be straightforward now)
... many many new tests, both of the before-xc variety (it's
amazing in how many ways I can get the type system
wrong) and of the regular form. Also add some
ctor tests that aren't exercised yet.

Christophe Rhodes Christophe Rhodes 2005-09-09

1 2 > >> (Page 1 of 2)
changed contrib/sb-aclrepl/inspect.lisp
changed src/code/class.lisp
changed src/code/condition.lisp
changed src/code/cross-misc.lisp
changed src/code/cross-type.lisp
changed src/code/defstruct.lisp
changed src/code/early-extensions.lisp
changed src/code/fop.lisp
changed src/code/inspect.lisp
changed src/code/interr.lisp
changed src/code/late-type.lisp
changed src/code/pred.lisp
changed src/code/primordial-type.lisp
changed src/code/target-defstruct.lisp
changed src/code/target-type.lisp
changed src/code/typep.lisp
changed src/compiler/generic/genesis.lisp
changed src/compiler/generic/primtype.lisp
changed src/compiler/typetran.lisp
changed src/pcl/ctor.lisp
changed src/pcl/defs.lisp
changed src/pcl/low.lisp
changed tests/clos.impure-cload.lisp
changed tests/clos.impure.lisp
changed tests/type.before-xc.lisp
contrib/sb-aclrepl/inspect.lisp Diff Switch to side-by-side view
Loading...
src/code/class.lisp Diff Switch to side-by-side view
Loading...
src/code/condition.lisp Diff Switch to side-by-side view
Loading...
src/code/cross-misc.lisp Diff Switch to side-by-side view
Loading...
src/code/cross-type.lisp Diff Switch to side-by-side view
Loading...
src/code/defstruct.lisp Diff Switch to side-by-side view
Loading...
src/code/early-extensions.lisp Diff Switch to side-by-side view
Loading...
src/code/fop.lisp Diff Switch to side-by-side view
Loading...
src/code/inspect.lisp Diff Switch to side-by-side view
Loading...
src/code/interr.lisp Diff Switch to side-by-side view
Loading...
src/code/late-type.lisp Diff Switch to side-by-side view
Loading...
src/code/pred.lisp Diff Switch to side-by-side view
Loading...
src/code/primordial-type.lisp Diff Switch to side-by-side view
Loading...
src/code/target-defstruct.lisp Diff Switch to side-by-side view
Loading...
src/code/target-type.lisp Diff Switch to side-by-side view
Loading...
src/code/typep.lisp Diff Switch to side-by-side view
Loading...
src/compiler/generic/genesis.lisp Diff Switch to side-by-side view
Loading...
src/compiler/generic/primtype.lisp Diff Switch to side-by-side view
Loading...
src/compiler/typetran.lisp Diff Switch to side-by-side view
Loading...
src/pcl/ctor.lisp Diff Switch to side-by-side view
Loading...
src/pcl/defs.lisp Diff Switch to side-by-side view
Loading...
src/pcl/low.lisp Diff Switch to side-by-side view
Loading...
tests/clos.impure-cload.lisp Diff Switch to side-by-side view
Loading...
tests/clos.impure.lisp Diff Switch to side-by-side view
Loading...
tests/type.before-xc.lisp Diff Switch to side-by-side view
Loading...
1 2 > >> (Page 1 of 2)