<div dir="ltr">Nicolas,<div><br></div><div>    I thought that there had been a conversation about this and that Bert had expressed a preference for DoubleByte and DoubleWord.  Hence I kept to that.  If I&#39;m mistaken forgive me.  But personally I don&#39;t like HalfWord.  t&#39;s as ambiguous as word.  At least DoubleByte is not ambiguous.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Oct 20, 2016 at 12:59 PM,  <span dir="ltr">&lt;<a href="mailto:commits@source.squeak.org" target="_blank">commits@source.squeak.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Nicolas Cellier uploaded a new version of Kernel to project The Trunk:<br>
<a href="http://source.squeak.org/trunk/Kernel-nice.1039.mcz" rel="noreferrer" target="_blank">http://source.squeak.org/<wbr>trunk/Kernel-nice.1039.mcz</a><br>
<br>
==================== Summary ====================<br>
<br>
Name: Kernel-nice.1039<br>
Author: nice<br>
Time: 20 September 2016, 11:00:27.302558 pm<br>
UUID: b0aeabf6-f73d-44c4-be8b-<wbr>d2c66a73486f<br>
Ancestors: Kernel-bf.1038<br>
<br>
Introduce HalfWord (16 bits) and DoubleWord (64 bits) subclasses which are possible in Spur format, but yet not exploited.<br>
<br>
=============== Diff against Kernel-bf.1038 ===============<br>
<br>
Item was added:<br>
+ ----- Method: Behavior&gt;&gt;isDoubleWords (in category &#39;testing&#39;) -----<br>
+ isDoubleWords<br>
+       &quot;Answer true if the receiver is made of 64-bit instance variables.&quot;<br>
+<br>
+       ^self instSpec = 2r1001!<br>
<br>
Item was added:<br>
+ ----- Method: Behavior&gt;&gt;isHalfWords (in category &#39;testing&#39;) -----<br>
+ isHalfWords<br>
+       &quot;Answer true if the receiver is made of 16-bit instance variables.&quot;<br>
+<br>
+       ^(self instSpec bitAnd: 2r11100) = 2r1100!<br>
<br>
Item was changed:<br>
  ----- Method: Behavior&gt;&gt;isWords (in category &#39;testing&#39;) -----<br>
  isWords<br>
        &quot;Answer true if the receiver is made of 32-bit instance variables.&quot;<br>
<br>
+       ^(self instSpec bitAnd: 2r11110) = 2r1010!<br>
-       ^self isBytes not!<br>
<br>
Item was added:<br>
+ ----- Method: Class&gt;&gt;<wbr>variableDoubleWordSubclass:<wbr>instanceVariableNames:<wbr>classVariableNames:<wbr>poolDictionaries:category: (in category &#39;subclass creation&#39;) -----<br>
+ variableDoubleWordSubclass: t instanceVariableNames: f<br>
+       classVariableNames: d poolDictionaries: s category: cat<br>
+       &quot;This is the standard initialization message for creating a new class as a<br>
+       subclass of an existing class (the receiver) in which the subclass is to<br>
+       have indexable double-word-sized nonpointer variables.&quot;<br>
+       ^(ClassBuilder new)<br>
+               superclass: self<br>
+               variableDoubleWordSubclass: t<br>
+               instanceVariableNames: f<br>
+               classVariableNames: d<br>
+               poolDictionaries: s<br>
+               category: cat<br>
+ !<br>
<br>
Item was added:<br>
+ ----- Method: Class&gt;&gt;<wbr>variableDoubleWordSubclass:<wbr>uses:instanceVariableNames:<wbr>classVariableNames:<wbr>poolDictionaries:category: (in category &#39;subclass creation&#39;) -----<br>
+ variableDoubleWordSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f<br>
+       classVariableNames: d poolDictionaries: s category: cat<br>
+       &quot;This is the standard initialization message for creating a new class as a<br>
+       subclass of an existing class (the receiver) in which the subclass is to<br>
+       have indexable double-word-sized nonpointer variables.&quot;<br>
+<br>
+       | newClass copyOfOldClass |<br>
+       copyOfOldClass := self copy.<br>
+       newClass := self<br>
+               variableDoubleWordSubclass: t<br>
+               instanceVariableNames: f<br>
+               classVariableNames: d<br>
+               poolDictionaries: s<br>
+               category: cat.<br>
+<br>
+       newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition.<br>
+       SystemChangeNotifier uniqueInstance<br>
+               classDefinitionChangedFrom: copyOfOldClass to: newClass.<br>
+       ^newClass<br>
+ !<br>
<br>
Item was added:<br>
+ ----- Method: Class&gt;&gt;<wbr>variableHalfWordSubclass:<wbr>instanceVariableNames:<wbr>classVariableNames:<wbr>poolDictionaries:category: (in category &#39;subclass creation&#39;) -----<br>
+ variableHalfWordSubclass: t instanceVariableNames: f<br>
+       classVariableNames: d poolDictionaries: s category: cat<br>
+       &quot;This is the standard initialization message for creating a new class as a<br>
+       subclass of an existing class (the receiver) in which the subclass is to<br>
+       have indexable half-word-sized nonpointer variables.&quot;<br>
+       ^(ClassBuilder new)<br>
+               superclass: self<br>
+               variableHalfWordSubclass: t<br>
+               instanceVariableNames: f<br>
+               classVariableNames: d<br>
+               poolDictionaries: s<br>
+               category: cat<br>
+ !<br>
<br>
Item was added:<br>
+ ----- Method: Class&gt;&gt;<wbr>variableHalfWordSubclass:uses:<wbr>instanceVariableNames:<wbr>classVariableNames:<wbr>poolDictionaries:category: (in category &#39;subclass creation&#39;) -----<br>
+ variableHalfWordSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f<br>
+       classVariableNames: d poolDictionaries: s category: cat<br>
+       &quot;This is the standard initialization message for creating a new class as a<br>
+       subclass of an existing class (the receiver) in which the subclass is to<br>
+       have indexable half-word-sized nonpointer variables.&quot;<br>
+<br>
+       | newClass copyOfOldClass |<br>
+       copyOfOldClass := self copy.<br>
+       newClass := self<br>
+               variableHalfWordSubclass: t<br>
+               instanceVariableNames: f<br>
+               classVariableNames: d<br>
+               poolDictionaries: s<br>
+               category: cat.<br>
+<br>
+       newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition.<br>
+       SystemChangeNotifier uniqueInstance<br>
+               classDefinitionChangedFrom: copyOfOldClass to: newClass.<br>
+       ^newClass!<br>
<br>
Item was changed:<br>
  ----- Method: ClassBuilder&gt;&gt;superclass:<wbr>variableByteSubclass:<wbr>instanceVariableNames:<wbr>classVariableNames:<wbr>poolDictionaries:category: (in category &#39;public&#39;) -----<br>
  superclass: aClass<br>
        variableByteSubclass: t instanceVariableNames: f<br>
        classVariableNames: d poolDictionaries: s category: cat<br>
        &quot;This is the standard initialization message for creating a new class as a<br>
        subclass of an existing class in which the subclass is to<br>
        have indexable byte-sized nonpointer variables.&quot;<br>
        | oldClassOrNil actualType env |<br>
        (aClass instSize &gt; 0)<br>
                ifTrue: [^self error: &#39;cannot make a byte subclass of a class with named fields&#39;].<br>
        (aClass isVariable and: [aClass isWords])<br>
                ifTrue: [^self error: &#39;cannot make a byte subclass of a class with word fields&#39;].<br>
+       (aClass isVariable and: [aClass isHalfWords])<br>
+               ifTrue: [^self error: &#39;cannot make a byte subclass of a class with half word fields&#39;].<br>
+       (aClass isVariable and: [aClass isDoubleWords])<br>
+               ifTrue: [^self error: &#39;cannot make a byte subclass of a class with double word fields&#39;].<br>
        (aClass isVariable and: [aClass isPointers])<br>
                ifTrue: [^self error: &#39;cannot make a byte subclass of a class with pointer fields&#39;].<br>
        oldClassOrNil := aClass environment at: t ifAbsent:[nil].<br>
        actualType := (oldClassOrNil notNil<br>
                                   and: [oldClassOrNil typeOfClass == #compiledMethod])<br>
                                        ifTrue: [#compiledMethod]<br>
                                        ifFalse: [#bytes].<br>
        env := CurrentEnvironment signal ifNil: [aClass environment].<br>
        ^self<br>
                name: t<br>
                inEnvironment: env<br>
                subclassOf: aClass<br>
                type: actualType<br>
                instanceVariableNames: f<br>
                classVariableNames: d<br>
                poolDictionaries: s<br>
                category: cat!<br>
<br>
Item was added:<br>
+ ----- Method: ClassBuilder&gt;&gt;superclass:<wbr>variableDoubleWordSubclass:<wbr>instanceVariableNames:<wbr>classVariableNames:<wbr>poolDictionaries:category: (in category &#39;public&#39;) -----<br>
+ superclass: aClass<br>
+       variableDoubleWordSubclass: t instanceVariableNames: f<br>
+       classVariableNames: d poolDictionaries: s category: cat<br>
+       &quot;This is the standard initialization message for creating a new class as a<br>
+       subclass of an existing class in which the subclass is to<br>
+       have indexable double-word-sized nonpointer variables.&quot;<br>
+       | env |<br>
+       (aClass instSize &gt; 0)<br>
+               ifTrue: [^self error: &#39;cannot make a double word subclass of a class with named fields&#39;].<br>
+       (aClass isVariable and: [aClass isBytes])<br>
+               ifTrue: [^self error: &#39;cannot make a double word subclass of a class with byte fields&#39;].<br>
+       (aClass isVariable and: [aClass isHalfWords])<br>
+               ifTrue: [^self error: &#39;cannot make a double word subclass of a class with half word fields&#39;].<br>
+       (aClass isVariable and: [aClass isWords])<br>
+               ifTrue: [^self error: &#39;cannot make a double word subclass of a class with word fields&#39;].<br>
+       (aClass isVariable and: [aClass isPointers])<br>
+               ifTrue: [^self error: &#39;cannot make a double word subclass of a class with pointer fields&#39;].<br>
+       env := CurrentEnvironment signal ifNil: [aClass environment].<br>
+       ^self<br>
+               name: t<br>
+               inEnvironment: env<br>
+               subclassOf: aClass<br>
+               type: #longs<br>
+               instanceVariableNames: f<br>
+               classVariableNames: d<br>
+               poolDictionaries: s<br>
+               category: cat!<br>
<br>
Item was added:<br>
+ ----- Method: ClassBuilder&gt;&gt;superclass:<wbr>variableHalfWordSubclass:<wbr>instanceVariableNames:<wbr>classVariableNames:<wbr>poolDictionaries:category: (in category &#39;public&#39;) -----<br>
+ superclass: aClass<br>
+       variableHalfWordSubclass: t instanceVariableNames: f<br>
+       classVariableNames: d poolDictionaries: s category: cat<br>
+       &quot;This is the standard initialization message for creating a new class as a<br>
+       subclass of an existing class in which the subclass is to<br>
+       have indexable half-word-sized nonpointer variables.&quot;<br>
+       | env |<br>
+       (aClass instSize &gt; 0)<br>
+               ifTrue: [^self error: &#39;cannot make a half word subclass of a class with named fields&#39;].<br>
+       (aClass isVariable and: [aClass isBytes])<br>
+               ifTrue: [^self error: &#39;cannot make a half word subclass of a class with byte fields&#39;].<br>
+       (aClass isVariable and: [aClass isWords])<br>
+               ifTrue: [^self error: &#39;cannot make a half word subclass of a class with word fields&#39;].<br>
+       (aClass isVariable and: [aClass isDoubleWords])<br>
+               ifTrue: [^self error: &#39;cannot make a half word subclass of a class with double word fields&#39;].<br>
+       (aClass isVariable and: [aClass isPointers])<br>
+               ifTrue: [^self error: &#39;cannot make a half word subclass of a class with pointer fields&#39;].<br>
+       env := CurrentEnvironment signal ifNil: [aClass environment].<br>
+       ^self<br>
+               name: t<br>
+               inEnvironment: env<br>
+               subclassOf: aClass<br>
+               type: #shorts<br>
+               instanceVariableNames: f<br>
+               classVariableNames: d<br>
+               poolDictionaries: s<br>
+               category: cat!<br>
<br>
Item was changed:<br>
  ----- Method: ClassBuilder&gt;&gt;superclass:<wbr>variableWordSubclass:<wbr>instanceVariableNames:<wbr>classVariableNames:<wbr>poolDictionaries:category: (in category &#39;public&#39;) -----<br>
  superclass: aClass<br>
        variableWordSubclass: t instanceVariableNames: f<br>
        classVariableNames: d poolDictionaries: s category: cat<br>
        &quot;This is the standard initialization message for creating a new class as a<br>
        subclass of an existing class in which the subclass is to<br>
        have indexable word-sized nonpointer variables.&quot;<br>
        | env |<br>
        (aClass instSize &gt; 0)<br>
                ifTrue: [^self error: &#39;cannot make a word subclass of a class with named fields&#39;].<br>
        (aClass isVariable and: [aClass isBytes])<br>
                ifTrue: [^self error: &#39;cannot make a word subclass of a class with byte fields&#39;].<br>
+       (aClass isVariable and: [aClass isHalfWords])<br>
+               ifTrue: [^self error: &#39;cannot make a word subclass of a class with half word fields&#39;].<br>
+       (aClass isVariable and: [aClass isDoubleWords])<br>
+               ifTrue: [^self error: &#39;cannot make a word subclass of a class with double word fields&#39;].<br>
        (aClass isVariable and: [aClass isPointers])<br>
                ifTrue: [^self error: &#39;cannot make a word subclass of a class with pointer fields&#39;].<br>
        env := CurrentEnvironment signal ifNil: [aClass environment].<br>
        ^self<br>
                name: t<br>
                inEnvironment: env<br>
                subclassOf: aClass<br>
                type: #words<br>
                instanceVariableNames: f<br>
                classVariableNames: d<br>
                poolDictionaries: s<br>
                category: cat!<br>
<br>
<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><span style="font-size:small;border-collapse:separate"><div>_,,,^..^,,,_<br></div><div>best, Eliot</div></span></div></div></div>
</div>