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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.