[cmucl-imp] Re: Compiled COMPILE forms at load time Bug
Raymond Toy
toy.raymond at gmail.com
Tue Mar 16 04:41:48 CET 2010
On 3/15/10 1:58 PM, Helmut Eller wrote:
> * Raymond Toy [2010-03-15 16:18+0100] writes:
>
>
>> On 3/15/10 10:45 AM, Helmut Eller wrote:
>>
>>> * 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.
>>>
>>>
>> 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.
>
I tried undefine-function-name instead of undefine-structure. It works,
but having a redefined structure accessor that doesn't really work is a
problem. For example,
(defstruct abc a)
(defun abc-a (x) 42)
(make-abc :a 'a) -> #S(abc :a 42)
This seems not good either. Maybe disallowing redefining
structure-accessors this way is the best; don't kill the structure,
don't allow redefinition of the accessor either.
Ray
More information about the cmucl-imp
mailing list