[BUG][FIX] ClassBuilder cannot change class to variable subclass

Boris Gaertner Boris.Gaertner at gmx.net
Fri Jan 9 23:10:10 CET 2004


This was posted earlier, but without the [FIX] tag.
Seemingly this tag is needed to bring the mail into
the bug fix archive.

> > Hi boris
> >
> > When we started KCP, we were looking at withAllSubclassesDo: we realise
> > that the order of iterations
> > could be really important. This is a non-functional requirement that is
> > fun but dangerous.
> > I did not have the time to look at your changes now but I'm guessing
> > that the order is really important.
> > Is my hypothesis true?
> I think it is not.
>
> I compared earlier versions of the ClassBuilder with the current one
> and I think now, that both my proposals to fix the bug are bad.
> My first proposal is wrong and my second one is bad because it
> does unnecessary tests.  Let me explain this in greater detail.
>
> As I wrote last night (Jan 04), an earlier version of
> ClassBuilder>>validateSubclassFormat:from:forSuper:extra:
> used two iteration statements to keep two tests separate.
> This is a very important point, but yesterday I failed to
> fully understand it.
>
> The first test checks the number of named instance variables.
> This test is needed for the modified class and all its subclasses.
> For this test the use of "withAllSubclassesDo:" is correct
> and the order of the tests is irrelevant.
>
> The second test verifies that, with the new format, oldClass
> is general enough to be the superclass of its subclasses.
> Here it is sufficient to check the direct subclasses. This
> is also said in the comment that survived the changes that
> came with change set 5300:
>  "And check if the immediate subclasses of
> oldClass can keep its layout"
> Here the use of "subclassesDo:" is sufficient and "subclassesDo:"
> iterates over a collection that is often smaller than the collection
> that "allSubclassesDo:" iterates over.
> (It is not necessary to check the subclasses of the subclasses
> because this was done for every subclass when it was defined
> or modified for the last time.)
>
> I think that we should go back to the use of two iteration statements.
> The attached third proposal of a fix supersedes my two earlier
> proposals. (The proposal was of course checked against the
> tests that Andreas posted yesterday. Thank you, Andreas!)
>
> I feel sorry that I needed three attempts and four mails to
> come up with a reasonably good proposal, but the stuff
> is really a bit tricky. Comments are therefore most welcome.
>
> Greetings, Boris
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ClassBuilderCheck-bg.4.cs
Type: application/octet-stream
Size: 1688 bytes
Desc: not available
Url : http://lists.squeakfoundation.org/pipermail/squeak-harvest/attachments/20040109/772e7c9a/ClassBuilderCheck-bg.4.obj


More information about the Squeak-harvest mailing list