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
