On Sun, Jan 26, 2014 at 10:50 PM, Martin Dias <tinchodias@gmail.com> wrote:
On Sun, Jan 26, 2014 at 4:07 PM, Tudor Girba <tudor@tudorgirba.com> 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