Compiled COMPILE forms at load time Bug

Helmut Eller heller at common-lisp.net
Tue Mar 16 12:16:25 CET 2010


* Raymond Toy [2010-03-15 22:49+0100] writes:

>>> The code that does this is define-function-name in proclaim.lisp.  If
>>> the name is an accessor-for, then undefine-structure is called.   The
>>> comment for undefine-structure says it's supposed to blow away all
>>> compiler info and undefining all associated functions.
>>>     
>> Now I see.  It looks like undefine-function-name would be more adequate
>> or just fmakunbound.
>>   
>
> Yeah, that would work too.  I guess we need to decide what we really
> want to happen if you try to redefine a structure accessor.  Undefining
> the structure seems a bit heavy-handed, especially since we just warn
> afterwards instead of signaling at least a continuable error.  We could
> just allow the redefinition and assume (or perhaps check) that the new
> function at least takes the same arguments.

For (defun some-existing-accessor ..) I'd like to see a warning at
compile time--if it can be done easily.  

At load time, a cerror if the whole structure gets removed; no warning
if only the accessor gets overwritten.  We have already definition locks
which can be used for more delicate accessor names.

>> It's a bit troubling that c:%%defun does so much more than a simple
>> (setf (fdefinition ..)).  If a user calls (setf (fdefinition ..))
>>   
> %%defun doesn't seem like so much to me; it looks like it's just setting
> up the compiler info db with the appropriate info.
>> directly the various bits in the info db are not cleaned out.
>>   
> That's probably an oversight; we can add another *setf-fdefinition-hook*
> to clear out the info db or update the info db based on what ever
> information we have about the new fdefinition function.

On one side (setf (fdefinition ..)) should delete/overwrite the stuff
that a previous %%defun left in the info db.  On the other hand, if the
user wants to update the info db he can and should use defun.
Hmm.. actually I prefer the latter, i.e. what CMUCL does currently.

Helmut




More information about the cmucl-imp mailing list