On 3/12/10 11:45 AM, Helmut Eller wrote:
* Raymond Toy [2010-03-12 12:35+0100] writes:
So COMPILE has silently zapped the structure. We should probably print he warning for this too.
Yes, definitely. Also for this:
(defstruct xyz a) (setf (fdefinition 'xyz-a) (lambda () 42))
I added a hook to *setf-fdefinition-hook* to check for this case. Works ok, but now I can't compile clx/depdefs.lisp. CMUCL complains about redefining reply-size and buffer-lock which are slot accessor functions. But I haven't figured out from the code where the redefinition is coming from. Also, consider this: (defstruct abc a b c) (defun abc-a () 42) CMUCL undefines the structure, but (defstruct abc a) produces an error about incompatibly redefining the structure.
Note that in both cases any existing structures will be in a bad state. They still exist, but there's not much you can do with them.
Compiled could would continue to work since accessors are inlined. Also (type-of (make-xyz)) still works. The printer is effed up, though.
If we undefined the structure, I would expect make-xyz (or make-abc) not to work. What to do? Ray