On Sun, Jan 26, 2014 at 10:50 PM, Martin Dias <[email protected]> wrote:

>
>
>
> On Sun, Jan 26, 2014 at 4:07 PM, Tudor Girba <[email protected]> wrote:
>
>> I looked more into it, and here is a smaller example:
>> Gofer new
>> smalltalkhubUser: 'Moose' project: 'MooseAlgos';
>> package: 'Moose-Algos-Graph';
>>  load
>>
>> This one does open the debugger, so the other emergency evaluator issue
>> comes from somewhere else.
>>
>> The problem seems to come from a Trait being defined in this package, and
>> loading this trait triggers ClassModifiedClassDefinition which stumbles in
>>
>> ClassModifiedClassDefinition>>isPropagation
>> "If there is not slot changes, I can assume that there is a propagation
>> (the change is in one of the superclasses)"
>>  self oldClassDefinition layout ifNil: [ ^ false ].
>>  ^ self newClassDefinition layout instanceVariables = self
>> oldClassDefinition layout instanceVariables
>>
>>
> Despite of the name of ClassModifiedClassDefinition, it is announced also
> when traits are modified. I don't know if Trait should implement #layout...
> but it is not.
>
> I reproduced using this:
>
> Trait named: #DDDD.
> Trait
> named: #DDDD
> uses: {TSortable}
>  category: 'a'.
>
> I guess that ClassModifiedClassDefinition is not only being announced when
> a class changed but also it is being announced when its superclass changed
> (in the case, "propagated"). So the purpose of #isPropagation is the check
> that. But I'm not sure this announcement should be done for the
> subclasses...
>
>
>
Yes, when a class is redefined, the change is announced for subclasses
also. Maybe we shouldn't, no?

code to reproduce:


aClass := Object subclass: #A.
aClass subclass: #B.

anns := OrderedCollection new.
SystemAnnouncer uniqueInstance
when: ClassModifiedClassDefinition
 send: #add:
to: anns.

Object
subclass: #A
instanceVariableNames: 'a'.

anns. --->
an OrderedCollection(a ClassModifiedClassDefinition a
ClassModifiedClassDefinition)



Martín

Reply via email to