[V3dot9] Fwd: Solution for condenseChanges problem

Stéphane Ducasse stephane.ducasse at univ-savoie.fr
Mon Aug 28 14:58:27 UTC 2006



Begin forwarded message:

> From: Adrian Lienhard <alienhard at netstyle.ch>
> Date: 28 août 2006 15:54:41 HAEC
> To: Stéphane Ducasse <stephane.ducasse at univ-savoie.fr>
> Subject: Solution for condenseChanges problem
>
> Hi Stef
>
> I found the problem...
> [Explanation: It originates in the update from 7048 to 7049 where  
> some classes are recompiled. This also recompiles the trait methods  
> in those classes. This breaks the assumption in #moveChangesTo:  
> that a method needs to be moved to the new changes file only if it  
> is not from a trait or if it is from a trait but with a supersend  
> (this is assumed to be the only case for which traits methods are  
> not identical with the original method in the trait). Since this is  
> not the case after the recompilation, now there are some old  
> methods not moved to the new changes and hence they still have old  
> pointers].
>
> To fix the problem, the cleanest thing is to take a 7035 image, and  
> evaluate the following code, before condenseChanges:
>
> Smalltalk allClassesAndTraits do: [:t |
> 	(t methodDict keys select: [:s | t includesLocalSelector: s]) do:  
> [:s |
> 	t notifyUsersOfChangedSelectors: {s}].
> 	(t classSide methodDict keys select: [:s | t classSide
> 		includesLocalSelector: s]) do: [:s |
> 		t classSide notifyUsersOfChangedSelectors: {s}]]
>
> This is the same like in ScriptLoader>>#updateFrom7039.
>
> I didn't check whether condensing sources works afterwards, but  
> accessing the versions seems to be ok.
>
> Adrian



More information about the V3dot9 mailing list