Re: Compiled COMPILE forms at load time Bug
Helmut Eller <[email protected]>
| Newsgroups | gmane.lisp.cmucl.devel |
|---|---|
| Message-ID | <[email protected]> |
* Raymond Toy [2010-03-15 15:01+0100] writes: > 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 CMUCL undefines the structure? That seems a bit aggressive. I think it should only delete the (c:info function info 'abc-a) entry if that's not done yet. The compiler uses that to recognize "known" functions. I don't know if (setf abc-a) still works if the info entry for abc-a is cleared. > (defstruct abc a) > > produces an error about incompatibly redefining the structure. That seems totally OK to me. >> >>> 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? I wouldn't undefine the entire structure; only redefine the named accessor function. For the printer we could come up with something like SLOT-VALUE but it should work without PCL. Helmut