Work at SourceForge, help us to make it a better place! We have an immediate need for a Support Technician in our San Francisco or Denver office.

Close

Commit [4f8f4b] Maximize Restore History

0.9.18.38:

Typechecking for CLOS instance slots, based on the earlier
clos-typechecking branch by Christophe Rhodes.

To get the typechecking right, especially when considering
inheritance where the slots in subclasses can have tighter
:TYPEs than in the superclass, some major PCL optimizations
need to be disabled. This slows down slot writes significantly.
Typechecking is thus only enabled for safe code.

* Store a function in each slot-definition with a non-T :TYPE, which
checks whether its parameter is of the proper type for the slot.
* Store in each class knowledge about whether the class was defined
in an environment with (SAFETY 3) policy.
* Don't do PV optimization for SETF of SLOT-VALUE in safe code.
* When generating writer methods for classes defined in safe code,
fetch the appropriate slotd for the instance and call its
type-checking-function (if one exists) before doing the slot write.
* Do the same in the slow path of SET-SLOT-VALUE
* When generating a ctor for a MAKE-INSTANCE call in safe code,
check the types of the supplied initargs.
* Fix declaration handling for some binding forms in SB-WALK
* Remove dead accessor-call optimization code
* Tests

Juho Snellman Juho Snellman 2006-11-07

added tests/clos-typechecking.impure.lisp
changed src/pcl/boot.lisp
changed src/pcl/braid.lisp
changed src/pcl/ctor.lisp
changed src/pcl/defclass.lisp
changed src/pcl/defs.lisp
changed src/pcl/dfun.lisp
changed src/pcl/fsc.lisp
changed src/pcl/slots-boot.lisp
changed src/pcl/slots.lisp
changed src/pcl/std-class.lisp
changed src/pcl/vector.lisp
changed src/pcl/walk.lisp
changed tests/mop.impure-cload.lisp
changed tests/type.impure.lisp
changed NEWS
changed version.lisp-expr
tests/clos-typechecking.impure.lisp Diff Switch to side-by-side view
Loading...
src/pcl/boot.lisp Diff Switch to side-by-side view
Loading...
src/pcl/braid.lisp Diff Switch to side-by-side view
Loading...
src/pcl/ctor.lisp Diff Switch to side-by-side view
Loading...
src/pcl/defclass.lisp Diff Switch to side-by-side view
Loading...
src/pcl/defs.lisp Diff Switch to side-by-side view
Loading...
src/pcl/dfun.lisp Diff Switch to side-by-side view
Loading...
src/pcl/fsc.lisp Diff Switch to side-by-side view
Loading...
src/pcl/slots-boot.lisp Diff Switch to side-by-side view
Loading...
src/pcl/slots.lisp Diff Switch to side-by-side view
Loading...
src/pcl/std-class.lisp Diff Switch to side-by-side view
Loading...
src/pcl/vector.lisp Diff Switch to side-by-side view
Loading...
src/pcl/walk.lisp Diff Switch to side-by-side view
Loading...
tests/mop.impure-cload.lisp Diff Switch to side-by-side view
Loading...
tests/type.impure.lisp Diff Switch to side-by-side view
Loading...
NEWS Diff Switch to side-by-side view
Loading...
version.lisp-expr Diff Switch to side-by-side view
Loading...