<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<TITLE>Nachricht</TITLE>
<META content="MSHTML 6.00.2600.0" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><SPAN class=702580416-12082002><FONT face=Arial color=#0000ff size=2>Cool.
Thanks for checking it.</FONT></SPAN></DIV>
<DIV><SPAN class=702580416-12082002><FONT face=Arial color=#0000ff
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=702580416-12082002><FONT face=Arial color=#0000ff
size=2>Cheers,</FONT></SPAN></DIV>
<DIV><SPAN class=702580416-12082002><FONT face=Arial color=#0000ff size=2>
- Andreas</FONT></SPAN></DIV>
<BLOCKQUOTE dir=ltr
style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #0000ff 2px solid; MARGIN-RIGHT: 0px">
<DIV></DIV>
<DIV class=OutlookMessageHeader lang=de dir=ltr align=left><FONT face=Tahoma
size=2>-----Original Message-----<BR><B>From:</B>
squeak-dev-admin@lists.squeakfoundation.org
[mailto:squeak-dev-admin@lists.squeakfoundation.org] <B>On Behalf Of
</B>Nathanael Schärli<BR><B>Sent:</B> Monday, August 12, 2002 5:20
PM<BR><B>To:</B> squeak-dev@lists.squeakfoundation.org<BR><B>Subject:</B> RE:
[BUG][FIX?]3.2 bug adding class variables<BR><BR></FONT></DIV>
<DIV><SPAN class=447101115-12082002><FONT face=Arial color=#0000ff
size=2>Andreas (and Boris)</FONT></SPAN></DIV>
<DIV><SPAN class=447101115-12082002><FONT face=Arial color=#0000ff
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=447101115-12082002><FONT face=Arial color=#0000ff size=2>You
are right Andreas (and Boris). I didn't have Squeak around when I answered
Boris' email, and by just briefly looking at the changeset I thought
that he wanted to get rid of the special treatment of metaclasses in the
condition "(oldClass == nil or: [oldClass isMeta not])". </FONT></SPAN><FONT
face=Tahoma><FONT size=2><SPAN class=447101115-12082002><FONT face=Arial
color=#0000ff>Now I see that he didn't and it is still ensured that there
is always a sole instance of each
metaclass.</FONT></SPAN></FONT></FONT></DIV>
<DIV><FONT face=Tahoma><FONT face=Arial color=#0000ff size=2><SPAN
class=447101115-12082002></SPAN></FONT></FONT> </DIV>
<DIV><FONT face=Tahoma><FONT face=Arial color=#0000ff size=2><SPAN
class=447101115-12082002>Thus, as far as I can see, Boris' fix is completely
safe and should probably be inclueded into the official
image...</SPAN></FONT></FONT></DIV>
<DIV><FONT face=Tahoma><FONT face=Arial color=#0000ff size=2><SPAN
class=447101115-12082002></SPAN></FONT></FONT> </DIV>
<DIV><FONT face=Tahoma><FONT face=Arial color=#0000ff size=2><SPAN
class=447101115-12082002>Cheers,</SPAN></FONT></FONT></DIV>
<DIV><FONT face=Tahoma><FONT face=Arial color=#0000ff size=2><SPAN
class=447101115-12082002>Nathanael</SPAN></FONT></FONT></DIV>
<DIV><FONT face=Tahoma><FONT face=Arial color=#0000ff size=2><SPAN
class=447101115-12082002></SPAN></FONT></FONT> </DIV>
<DIV><FONT face=Tahoma><FONT face=Arial color=#0000ff size=2><SPAN
class=447101115-12082002>BTW: I messed around with some of the critical
classes after filing in Boris' changeset, and I also run my "class
hierarchy consistency check method". Everything worked perfectly
fine!</SPAN></FONT></FONT></DIV>
<DIV><FONT face=Tahoma><FONT face=Arial color=#0000ff size=2><SPAN
class=447101115-12082002></SPAN></FONT></FONT> </DIV>
<DIV><FONT face=Tahoma><FONT size=2><SPAN
class=447101115-12082002></SPAN></FONT></FONT> </DIV>
<DIV><FONT face=Tahoma><FONT size=2><SPAN
class=447101115-12082002> </SPAN>-----Original
Message-----<BR><B>From:</B> squeak-dev-admin@lists.squeakfoundation.org
[mailto:squeak-dev-admin@lists.squeakfoundation.org] <B>On Behalf Of
</B>Andreas Raab<BR><B>Sent:</B> Monday, August 12, 2002 4:38 PM<BR><B>To:</B>
squeak-dev@lists.squeakfoundation.org<BR><B>Subject:</B> RE: [BUG][FIX?]3.2
bug adding class variables<BR><BR></DIV></FONT></FONT>
<BLOCKQUOTE dir=ltr
style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #0000ff 2px solid; MARGIN-RIGHT: 0px">
<DIV><SPAN class=199073514-12082002><FONT face=Arial color=#0000ff
size=2>Nathanael,</FONT></SPAN></DIV>
<DIV><SPAN class=199073514-12082002><FONT face=Arial color=#0000ff
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=199073514-12082002><FONT face=Arial color=#0000ff size=2>I
believe Boris' proposed fix is correct but I'll wait for your confirmation.
The reason for having the condition of "oldClass == nil or:[oldClass isMeta
not]" is that we *don't* want to clone non-metaclasses (if we did meta
classes have more than a single instance which breaks fundamental
assumptions in the recompilation process later) so a new class/metaclass has
to be created but it should certainly share everything that was present in
the old class (if any).</FONT></SPAN></DIV>
<DIV><SPAN class=199073514-12082002><FONT face=Arial color=#0000ff
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=199073514-12082002><FONT face=Arial color=#0000ff
size=2>Cheers,</FONT></SPAN></DIV>
<DIV><SPAN class=199073514-12082002><FONT face=Arial color=#0000ff
size=2> - Andreas</FONT></SPAN></DIV>
<DIV><SPAN class=199073514-12082002><FONT face=Arial color=#0000ff
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=199073514-12082002></SPAN><FONT face=Tahoma
size=2>-----Original Message-----<BR><B>From:</B>
squeak-dev-admin@lists.squeakfoundation.org
[mailto:squeak-dev-admin@lists.squeakfoundation.org] <B>On Behalf Of
</B>Nathanael Schärli<BR><B>Sent:</B> Monday, August 12, 2002 2:41
PM<BR><B>To:</B> squeak-dev@lists.squeakfoundation.org<BR><B>Subject:</B>
RE: [BUG][FIX?]3.2 bug adding class variables<BR><BR></DIV></FONT>
<BLOCKQUOTE dir=ltr
style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #0000ff 2px solid; MARGIN-RIGHT: 0px">
<DIV><SPAN class=307502912-12082002><FONT face=Arial color=#0000ff
size=2>Boris and Andreas,</FONT></SPAN></DIV>
<DIV><SPAN class=307502912-12082002><FONT face=Arial color=#0000ff
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=307502912-12082002><FONT face=Arial color=#0000ff
size=2>That's definitely an interesting issue, and it seems to be related
to the fix of the ClassBuilder Andreas and me did earlier this year.
Altough your fix seems to be pretty obvious and straight forward, I'm not
quite sure whether there are no negative implications. (Unfortunately, I
don't remember exactly why Andreas introduced the condition
"(oldClass == nil or: [oldClass isMeta not])", but I'm pretty sure that
there *was* a reason for treating metaclasses differently. Well, I'll have
a more detailed look at it when I have some time tonight and I'll let you
know.</FONT></SPAN></DIV>
<DIV><SPAN class=307502912-12082002><FONT face=Arial color=#0000ff
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=307502912-12082002><FONT face=Arial color=#0000ff
size=2>Cheers,</FONT></SPAN></DIV>
<DIV><SPAN class=307502912-12082002><FONT face=Arial color=#0000ff
size=2>Nathanael</FONT></SPAN></DIV>
<DIV><SPAN class=307502912-12082002><FONT face=Arial color=#0000ff
size=2></FONT></SPAN> </DIV>
<BLOCKQUOTE dir=ltr
style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #0000ff 2px solid; MARGIN-RIGHT: 0px">
<DIV></DIV>
<DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left><FONT
face=Tahoma size=2>-----Original Message-----<BR><B>From:</B>
squeak-dev-admin@lists.squeakfoundation.org
[mailto:squeak-dev-admin@lists.squeakfoundation.org] <B>On Behalf Of
</B>Boris Gaertner<BR><B>Sent:</B> Sunday, August 11, 2002 9:33
PM<BR><B>To:</B>
squeak-dev@lists.squeakfoundation.org<BR><B>Subject:</B> Re:
[BUG][FIX?]3.2 bug adding class variables<BR><BR></FONT></DIV>
<DIV><BR>Bob Arning <<A
href="mailto:arning@charm.net">arning@charm.net</A>> reported that
one cannot at the same time<BR>add an instance variable and a class
variable to a class. The bug is not<BR>very dramatic, because both
modifications can be done one by one, but<BR>it is nevertheless an
annoying bug.<BR><BR>Bob wrote:<BR><BR>>in 3.2 at 4653, all works as
expected, but in the latest (4917),<BR>>the class variable is not
accepted.<BR>>The key point is that adding an instance var and a
class var at the same<BR>>time will only change the instance
var<BR><BR>This bug is also present in 3.3a (#4954).<BR><BR>Debugging
(in the 3.2 image) reveals that the new class looses its<BR>classPool
when, in<BR>ClassBuilder>>recompile:from:to:mutate:, the
statement<BR><FONT face=Courier size=2></FONT></DIV>
<DIV><FONT face=Courier size=2>newClass _ self reshapeClass:
oldClass<BR> to:
newClass super: newClass superclass</FONT>.<BR>is executed.<BR><BR>In
2.7., the class variables of newClass survive that
statement.<BR><BR>The interesting things happen earlier.<BR><BR>In
ClassBuilder>>name:inEnvironment:subclassOf:type:instanceVariableNames:<BR>
classVariablenames:poolDicitionaries:category:unsafe:<BR><BR>we have
this statement:<BR><BR><FONT face=Courier size=2> newClass _
self<BR> newSubclassOf:
newSuper<BR> type:
type<BR> instanceVariables:
instVars<BR> from:
oldClass<BR> unsafe:
unsafe.<BR><BR></FONT>This is where the new class is created. Following
that statement I added<BR>(both in 3.2 final and in 2.7) this piece of
code:<BR><BR><FONT face=Courier size=2>(oldClass notNil and: [newClass
classPool == oldClass classPool])<BR> ifTrue: [self
halt]<BR> ifFalse: [self halt].<BR><BR></FONT>Then I
did what Bob described (added an instance variable and a
class<BR>variable to a class definition and saved the class definition
with "accept")<BR>and I saw that in 2.7 oldClass and
newClass share the same classPool,<BR>whereas in 3.2 they
don't.<BR><BR>A comparision of<BR><BR><FONT face=Courier
size=2>ClassBuilder>>newSubclassOf:type:instanveVariables:from:unsafe:<BR></FONT><BR>reveals
that in 2.7 the newClass is cloned from the oldClass if
the<BR>oldClass is not nil<BR>whereas in 3.2 newClass is cloned from
oldClass if the following<BR>condition evaluated to
false:<BR> <FONT face=Courier size=2>(oldClass == nil or:[oldClass
isMeta not])<BR><BR></FONT>In 3.3a this condition came with change set
4854 (ar 2/15/2002),<BR>for 3.2 I cannot find the change
set.<BR><BR><BR>I think that it would help to copy the
classPool from oldClass<BR>when oldClass is not nil. The
attached change set does exactly<BR>that and it seems to
work.<BR><BR>Note however that my change set is only a proposal. Andreas
or<BR>Nathanael could you please have a look at that code.<BR>Thank you
very
much.<BR><BR>Greetings<BR>Boris<BR><BR><BR></DIV></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BODY></HTML>