On 3/16/10 10:09 AM, Helmut Eller wrote:
* Raymond Toy [2010-03-16 14:37+0100] writes:
Let's see if I can summarize the discussion.
Attempts to redefine structure accessors should be a cerror. If you continue, then the structure is undefined (mostly) and the function is created. This seems better than the current behavior of just warning you about it and undefining the structure anyway.
(compile accessor new-def) should also be a cerror.
(setf (fdefinition accessor) new-def) shouldn't do anything special.
The structure printer and inspector should be modified to use %instance-ref so that we can still print and inspect structures even if the accessor has been redefined.
How does that sound?
Fine with me.
Actually, there's one other alternative. When the accessor is redefined, we can silently (or noisily) replace the dsd-accessor function with nil. Then we don't get the strange behavior of our redefined function being used to access the slot. This also means we can't actually access the slot ourselves either because we'll try to get the fdefinition of nil. But the structure and everything else remains defined. (I have not tried that out yet.) I also notice that you can redefine the structure predicate without warning. Perhaps we should warn about this too. Ray