>>>>> "Madhu" == Madhu <[EMAIL PROTECTED]> writes:
Madhu> * Raymond Toy <[EMAIL PROTECTED]> : Madhu> Wrote on Tue, 02 Dec 2008 20:23:45 -0500: Madhu> |> It may also have been a tradeoff, [since it is not being done in the Madhu> |> compiler] and you want to have at least one path available to the Madhu> |> programmer to set a slot value that avoids overhead of a type check. Madhu> | Madhu> | I've implemented this already. It basically does a check-type for (setf Madhu> | slot-value) for standard objects. This doesn't change what happens when Madhu> | slot-value is used in a method. Madhu> I'm not sure this is a good idea. (But I have not measured the cost of Madhu> the change, NOTE: I'm not objecting to the change) I did a quick test with: (defclass foo2 () ((slot :type single-float :initform 1.2f0) (slot2))) (defclass bar () ((a :type fixnum :initform 0))) (defparameter *o* (make-instance 'foo2)) (defmethod setslot ((obj bar) val) (setf (slot-value *o* 'slot) val) (setf (slot-value obj 'a) val)) Compile up the previous code. Then (setf (slot-value (make-instance 'foo2) 'slot) "string") signals an error. But (setslot (make-instance 'bar) 99) doesn't signal an error even though we're assigning a fixnum to a slot of type single-float. Hence, the change I made doesn't apply to slot-value in methods. (I guess slot-value in methods takes a different path.) I don't know PCL well enough to know exactly how methods get called or which ones are run. Ray