The Trunk: Kernel-eem.1045.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: Kernel-eem.1045.mcz

commits-2
Eliot Miranda uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-eem.1045.mcz

==================== Summary ====================

Name: Kernel-eem.1045
Author: eem
Time: 12 October 2016, 12:10:33.006651 pm
UUID: d91d38c6-bb5b-4fcd-a28b-1bdbc867a33e
Ancestors: Kernel-nice.1044

Add support for creating DoubleByte (isShorts) and DoubleWord (isLongs) variable classes.

=============== Diff against Kernel-nice.1044 ===============

Item was changed:
  ----- Method: Behavior>>isBytes (in category 'testing') -----
  isBytes
+ "Answer whether the receiver's instances have indexed 8-bit integer instance variables.
- "Answer whether the receiver has 8-bit instance variables.
  Above Cog Spur the class format is
  <5 bits inst spec><16 bits inst size>
  where the 5-bit inst spec is
  0 = 0 sized objects (UndefinedObject True False et al)
  1 = non-indexable objects with inst vars (Point et al)
  2 = indexable objects with no inst vars (Array et al)
  3 = indexable objects with inst vars (MethodContext AdditionalMethodState et al)
  4 = weak indexable objects with inst vars (WeakArray et al)
  5 = weak non-indexable objects with inst vars (ephemerons) (Ephemeron)
  6 = unused
  7 = immediates (SmallInteger, Character)
  8 = unused
  9 = 64-bit indexable
  10-11 = 32-bit indexable (Bitmap)
  12-15 = 16-bit indexable
  16-23 = 8-bit indexable
  24-31 = compiled methods (CompiledMethod)"
  ^self instSpec >= 16!

Item was added:
+ ----- Method: Behavior>>isLongs (in category 'testing') -----
+ isLongs
+ "Answer whether the receiver's instances have indexed 64-bit integer instance variables.
+ Above Cog Spur the class format is
+ <5 bits inst spec><16 bits inst size>
+ where the 5-bit inst spec is
+ 0 = 0 sized objects (UndefinedObject True False et al)
+ 1 = non-indexable objects with inst vars (Point et al)
+ 2 = indexable objects with no inst vars (Array et al)
+ 3 = indexable objects with inst vars (MethodContext AdditionalMethodState et al)
+ 4 = weak indexable objects with inst vars (WeakArray et al)
+ 5 = weak non-indexable objects with inst vars (ephemerons) (Ephemeron)
+ 6 = unused
+ 7 = immediates (SmallInteger, Character)
+ 8 = unused
+ 9 = 64-bit indexable
+ 10-11 = 32-bit indexable (Bitmap)
+ 12-15 = 16-bit indexable
+ 16-23 = 8-bit indexable
+ 24-31 = compiled methods (CompiledMethod)"
+ ^self instSpec = 9!

Item was added:
+ ----- Method: Behavior>>isShorts (in category 'testing') -----
+ isShorts
+ "Answer whether the receiver's instances have indexed 16-bit integer instance variables.
+ Above Cog Spur the class format is
+ <5 bits inst spec><16 bits inst size>
+ where the 5-bit inst spec is
+ 0 = 0 sized objects (UndefinedObject True False et al)
+ 1 = non-indexable objects with inst vars (Point et al)
+ 2 = indexable objects with no inst vars (Array et al)
+ 3 = indexable objects with inst vars (MethodContext AdditionalMethodState et al)
+ 4 = weak indexable objects with inst vars (WeakArray et al)
+ 5 = weak non-indexable objects with inst vars (ephemerons) (Ephemeron)
+ 6 = unused
+ 7 = immediates (SmallInteger, Character)
+ 8 = unused
+ 9 = 64-bit indexable
+ 10-11 = 32-bit indexable (Bitmap)
+ 12-15 = 16-bit indexable
+ 16-23 = 8-bit indexable
+ 24-31 = compiled methods (CompiledMethod)"
+ ^self instSpec = 12!

Item was changed:
  ----- Method: Behavior>>isWords (in category 'testing') -----
  isWords
+ "Answer whether the receiver's instances have indexed 32-bit integer instance variables.
+ Above Cog Spur the class format is
+ <5 bits inst spec><16 bits inst size>
+ where the 5-bit inst spec is
+ 0 = 0 sized objects (UndefinedObject True False et al)
+ 1 = non-indexable objects with inst vars (Point et al)
+ 2 = indexable objects with no inst vars (Array et al)
+ 3 = indexable objects with inst vars (MethodContext AdditionalMethodState et al)
+ 4 = weak indexable objects with inst vars (WeakArray et al)
+ 5 = weak non-indexable objects with inst vars (ephemerons) (Ephemeron)
+ 6 = unused
+ 7 = immediates (SmallInteger, Character)
+ 8 = unused
+ 9 = 64-bit indexable
+ 10-11 = 32-bit indexable (Bitmap)
+ 12-15 = 16-bit indexable
+ 16-23 = 8-bit indexable
+ 24-31 = compiled methods (CompiledMethod)"
+ ^self instSpec = 10!
- "Answer true if the receiver is made of 32-bit instance variables."
-
- ^self isBytes not!

Item was changed:
  ----- Method: Class>>variableByteSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
  variableByteSubclass: t instanceVariableNames: f
  classVariableNames: d poolDictionaries: s category: cat
  "This is the standard initialization message for creating a new class as a
  subclass of an existing class (the receiver) in which the subclass is to
+ have indexable 8-bit byte-sized nonpointer variables."
+ ^ClassBuilder new
- have indexable byte-sized nonpointer variables."
- ^(ClassBuilder new)
  superclass: self
  variableByteSubclass: t
  instanceVariableNames: f
  classVariableNames: d
  poolDictionaries: s
+ category: cat!
- category: cat
- !

Item was changed:
  ----- Method: Class>>variableByteSubclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
  variableByteSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f
  classVariableNames: d poolDictionaries: s category: cat
  "This is the standard initialization message for creating a new class as a
  subclass of an existing class (the receiver) in which the subclass is to
+ have indexable 8-bit byte-sized nonpointer variables."
- have indexable byte-sized nonpointer variables."
 
  | newClass copyOfOldClass |
  copyOfOldClass := self copy.
  newClass := self
  variableByteSubclass: t
  instanceVariableNames: f
  classVariableNames: d
  poolDictionaries: s
  category: cat.
 
  newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition.
  SystemChangeNotifier uniqueInstance
  classDefinitionChangedFrom: copyOfOldClass to: newClass.
+ ^newClass!
- ^newClass
- !

Item was added:
+ ----- Method: Class>>variableDoubleByteSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
+ variableDoubleByteSubclass: t instanceVariableNames: f
+ classVariableNames: d poolDictionaries: s category: cat
+ "This is the standard initialization message for creating a new class as a
+ subclass of an existing class (the receiver) in which the subclass is to
+ have indexable 16-bit double byte-sized nonpointer variables."
+ ^ClassBuilder new
+ superclass: self
+ variableDoubleByteSubclass: t
+ instanceVariableNames: f
+ classVariableNames: d
+ poolDictionaries: s
+ category: cat!

Item was added:
+ ----- Method: Class>>variableDoubleByteSubclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
+ variableDoubleByteSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f
+ classVariableNames: d poolDictionaries: s category: cat
+ "This is the standard initialization message for creating a new class as a
+ subclass of an existing class (the receiver) in which the subclass is to
+ have indexable 16-bit double byte-sized nonpointer variables."
+
+ | newClass copyOfOldClass |
+ copyOfOldClass := self copy.
+ newClass := self
+ variableDoubleByteSubclass: t
+ instanceVariableNames: f
+ classVariableNames: d
+ poolDictionaries: s
+ category: cat.
+
+ newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition.
+ SystemChangeNotifier uniqueInstance
+ classDefinitionChangedFrom: copyOfOldClass to: newClass.
+ ^newClass!

Item was added:
+ ----- Method: Class>>variableDoubleWordSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
+ variableDoubleWordSubclass: t instanceVariableNames: f
+ classVariableNames: d poolDictionaries: s category: cat
+ "This is the standard initialization message for creating a new class as a
+ subclass of an existing class (the receiver) in which the subclass is to
+ have indexable 64-bit word-sized nonpointer variables."
+ ^ClassBuilder new
+ superclass: self
+ variableDoubleWordSubclass: t
+ instanceVariableNames: f
+ classVariableNames: d
+ poolDictionaries: s
+ category: cat!

Item was added:
+ ----- Method: Class>>variableDoubleWordSubclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
+ variableDoubleWordSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f
+ classVariableNames: d poolDictionaries: s category: cat
+ "This is the standard initialization message for creating a new class as a
+ subclass of an existing class (the receiver) in which the subclass is to
+ have indexable 64-bit word-sized nonpointer variables."
+
+ | newClass copyOfOldClass |
+ copyOfOldClass := self copy.
+ newClass := self
+ variableDoubleWordSubclass: t
+ instanceVariableNames: f
+ classVariableNames: d
+ poolDictionaries: s
+ category: cat.
+
+ newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition.
+ SystemChangeNotifier uniqueInstance
+ classDefinitionChangedFrom: copyOfOldClass to: newClass.
+ ^newClass!

Item was changed:
  ----- Method: Class>>variableWordSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
  variableWordSubclass: t instanceVariableNames: f
  classVariableNames: d poolDictionaries: s category: cat
  "This is the standard initialization message for creating a new class as a
  subclass of an existing class (the receiver) in which the subclass is to
+ have indexable 32-bit word-sized nonpointer variables."
+ ^ClassBuilder new
- have indexable word-sized nonpointer variables."
- ^(ClassBuilder new)
  superclass: self
  variableWordSubclass: t
  instanceVariableNames: f
  classVariableNames: d
  poolDictionaries: s
+ category: cat!
- category: cat
- !

Item was changed:
  ----- Method: Class>>variableWordSubclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
  variableWordSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f
  classVariableNames: d poolDictionaries: s category: cat
  "This is the standard initialization message for creating a new class as a
  subclass of an existing class (the receiver) in which the subclass is to
+ have indexable 32-bit word-sized nonpointer variables."
- have indexable word-sized nonpointer variables."
 
  | newClass copyOfOldClass |
  copyOfOldClass := self copy.
  newClass := self
  variableWordSubclass: t
  instanceVariableNames: f
  classVariableNames: d
  poolDictionaries: s
  category: cat.
 
  newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition.
  SystemChangeNotifier uniqueInstance
  classDefinitionChangedFrom: copyOfOldClass to: newClass.
+ ^newClass !
- ^newClass
- !

Item was changed:
  ----- Method: ClassBuilder>>superclass:variableByteSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'public') -----
  superclass: aClass
+ variableByteSubclass: t instanceVariableNames: f
- variableByteSubclass: t instanceVariableNames: f
  classVariableNames: d poolDictionaries: s category: cat
+ "This is the standard initialization message for creating a new class as a subclass of an
+ existing class in which the subclass is to have indexable 8-bit byte-sized nonpointer variables."
- "This is the standard initialization message for creating a new class as a
- subclass of an existing class in which the subclass is to
- have indexable byte-sized nonpointer variables."
  | oldClassOrNil actualType env |
+ aClass instSize > 0
- (aClass instSize > 0)
  ifTrue: [^self error: 'cannot make a byte subclass of a class with named fields'].
+ (aClass isVariable and: [aClass isBytes not])
+ ifTrue: [^self error: 'cannot make an 8-bit byte subclass of a class with 16, 32 or 64 bit fields'].
- (aClass isVariable and: [aClass isWords])
- ifTrue: [^self error: 'cannot make a byte subclass of a class with word fields'].
  (aClass isVariable and: [aClass isPointers])
  ifTrue: [^self error: 'cannot make a byte subclass of a class with pointer fields'].
  oldClassOrNil := aClass environment at: t ifAbsent:[nil].
  actualType := (oldClassOrNil notNil
    and: [oldClassOrNil typeOfClass == #compiledMethod])
  ifTrue: [#compiledMethod]
  ifFalse: [#bytes].
  env := CurrentEnvironment signal ifNil: [aClass environment].
  ^self
  name: t
  inEnvironment: env
  subclassOf: aClass
  type: actualType
  instanceVariableNames: f
  classVariableNames: d
  poolDictionaries: s
  category: cat!

Item was added:
+ ----- Method: ClassBuilder>>superclass:variableDoubleByteSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'public') -----
+ superclass: aClass
+ variableDoubleByteSubclass: t instanceVariableNames: f
+ classVariableNames: d poolDictionaries: s category: cat
+ "This is the standard initialization message for creating a new class as a subclass of an
+ existing class in which the subclass is to have indexable 16-bit-sized nonpointer variables."
+ | oldClassOrNil env |
+ aClass instSize > 0
+ ifTrue: [^self error: 'cannot make a byte subclass of a class with named fields'].
+ (aClass isVariable and: [aClass isShorts not])
+ ifTrue: [^self error: 'cannot make a 16-bit short subclass of a class with 8, 32 or 64 bit fields'].
+ (aClass isVariable and: [aClass isPointers])
+ ifTrue: [^self error: 'cannot make a byte subclass of a class with pointer fields'].
+ oldClassOrNil := aClass environment at: t ifAbsent:[nil].
+ env := CurrentEnvironment signal ifNil: [aClass environment].
+ ^self
+ name: t
+ inEnvironment: env
+ subclassOf: aClass
+ type: #shorts
+ instanceVariableNames: f
+ classVariableNames: d
+ poolDictionaries: s
+ category: cat!

Item was added:
+ ----- Method: ClassBuilder>>superclass:variableDoubleWordSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'public') -----
+ superclass: aClass
+ variableDoubleWordSubclass: t instanceVariableNames: f
+ classVariableNames: d poolDictionaries: s category: cat
+ "This is the standard initialization message for creating a new class as a subclass of an
+ existing class in which the subclass is to have indexable 16-bit-sized nonpointer variables."
+ | oldClassOrNil env |
+ aClass instSize > 0
+ ifTrue: [^self error: 'cannot make a byte subclass of a class with named fields'].
+ (aClass isVariable and: [aClass isLongs not])
+ ifTrue: [^self error: 'cannot make a 64-bit long subclass of a class with 8, 16 or 32 bit fields'].
+ (aClass isVariable and: [aClass isPointers])
+ ifTrue: [^self error: 'cannot make a byte subclass of a class with pointer fields'].
+ oldClassOrNil := aClass environment at: t ifAbsent:[nil].
+ env := CurrentEnvironment signal ifNil: [aClass environment].
+ ^self
+ name: t
+ inEnvironment: env
+ subclassOf: aClass
+ type: #longs
+ instanceVariableNames: f
+ classVariableNames: d
+ poolDictionaries: s
+ category: cat!

Item was changed:
  ----- Method: ClassBuilder>>superclass:variableWordSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'public') -----
  superclass: aClass
  variableWordSubclass: t instanceVariableNames: f
  classVariableNames: d poolDictionaries: s category: cat
+ "This is the standard initialization message for creating a new class as a subclass of an
+ existing class in which the subclass is to have indexable 32-bit word-sized nonpointer variables."
- "This is the standard initialization message for creating a new class as a
- subclass of an existing class in which the subclass is to
- have indexable word-sized nonpointer variables."
  | env |
+ aClass instSize > 0
- (aClass instSize > 0)
  ifTrue: [^self error: 'cannot make a word subclass of a class with named fields'].
+ (aClass isVariable and: [aClass isWords not])
+ ifTrue: [^self error: 'cannot make a 32-bit word subclass of a class with 8, 16 or 64 bit fields'].
- (aClass isVariable and: [aClass isBytes])
- ifTrue: [^self error: 'cannot make a word subclass of a class with byte fields'].
  (aClass isVariable and: [aClass isPointers])
  ifTrue: [^self error: 'cannot make a word subclass of a class with pointer fields'].
  env := CurrentEnvironment signal ifNil: [aClass environment].
  ^self
  name: t
  inEnvironment: env
  subclassOf: aClass
  type: #words
  instanceVariableNames: f
  classVariableNames: d
  poolDictionaries: s
  category: cat!


Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Kernel-eem.1045.mcz

Nicolas Cellier
Hi Eliot,
did you see related changes in inbox?

2016-10-12 21:10 GMT+02:00 <[hidden email]>:
Eliot Miranda uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-eem.1045.mcz

==================== Summary ====================

Name: Kernel-eem.1045
Author: eem
Time: 12 October 2016, 12:10:33.006651 pm
UUID: d91d38c6-bb5b-4fcd-a28b-1bdbc867a33e
Ancestors: Kernel-nice.1044

Add support for creating DoubleByte (isShorts) and DoubleWord (isLongs) variable classes.

=============== Diff against Kernel-nice.1044 ===============

Item was changed:
  ----- Method: Behavior>>isBytes (in category 'testing') -----
  isBytes
+       "Answer whether the receiver's instances have indexed 8-bit integer instance variables.
-       "Answer whether the receiver has 8-bit instance variables.
         Above Cog Spur the class format is
                <5 bits inst spec><16 bits inst size>
         where the 5-bit inst spec is
                        0       = 0 sized objects (UndefinedObject True False et al)
                        1       = non-indexable objects with inst vars (Point et al)
                        2       = indexable objects with no inst vars (Array et al)
                        3       = indexable objects with inst vars (MethodContext AdditionalMethodState et al)
                        4       = weak indexable objects with inst vars (WeakArray et al)
                        5       = weak non-indexable objects with inst vars (ephemerons) (Ephemeron)
                        6       = unused
                        7       = immediates (SmallInteger, Character)
                        8       = unused
                        9       = 64-bit indexable
                10-11   = 32-bit indexable (Bitmap)
                12-15   = 16-bit indexable
                16-23   = 8-bit indexable
                24-31   = compiled methods (CompiledMethod)"
        ^self instSpec >= 16!

Item was added:
+ ----- Method: Behavior>>isLongs (in category 'testing') -----
+ isLongs
+       "Answer whether the receiver's instances have indexed 64-bit integer instance variables.
+        Above Cog Spur the class format is
+               <5 bits inst spec><16 bits inst size>
+        where the 5-bit inst spec is
+                       0       = 0 sized objects (UndefinedObject True False et al)
+                       1       = non-indexable objects with inst vars (Point et al)
+                       2       = indexable objects with no inst vars (Array et al)
+                       3       = indexable objects with inst vars (MethodContext AdditionalMethodState et al)
+                       4       = weak indexable objects with inst vars (WeakArray et al)
+                       5       = weak non-indexable objects with inst vars (ephemerons) (Ephemeron)
+                       6       = unused
+                       7       = immediates (SmallInteger, Character)
+                       8       = unused
+                       9       = 64-bit indexable
+               10-11   = 32-bit indexable (Bitmap)
+               12-15   = 16-bit indexable
+               16-23   = 8-bit indexable
+               24-31   = compiled methods (CompiledMethod)"
+       ^self instSpec = 9!

Item was added:
+ ----- Method: Behavior>>isShorts (in category 'testing') -----
+ isShorts
+       "Answer whether the receiver's instances have indexed 16-bit integer instance variables.
+        Above Cog Spur the class format is
+               <5 bits inst spec><16 bits inst size>
+        where the 5-bit inst spec is
+                       0       = 0 sized objects (UndefinedObject True False et al)
+                       1       = non-indexable objects with inst vars (Point et al)
+                       2       = indexable objects with no inst vars (Array et al)
+                       3       = indexable objects with inst vars (MethodContext AdditionalMethodState et al)
+                       4       = weak indexable objects with inst vars (WeakArray et al)
+                       5       = weak non-indexable objects with inst vars (ephemerons) (Ephemeron)
+                       6       = unused
+                       7       = immediates (SmallInteger, Character)
+                       8       = unused
+                       9       = 64-bit indexable
+               10-11   = 32-bit indexable (Bitmap)
+               12-15   = 16-bit indexable
+               16-23   = 8-bit indexable
+               24-31   = compiled methods (CompiledMethod)"
+       ^self instSpec = 12!

Item was changed:
  ----- Method: Behavior>>isWords (in category 'testing') -----
  isWords
+       "Answer whether the receiver's instances have indexed 32-bit integer instance variables.
+        Above Cog Spur the class format is
+               <5 bits inst spec><16 bits inst size>
+        where the 5-bit inst spec is
+                       0       = 0 sized objects (UndefinedObject True False et al)
+                       1       = non-indexable objects with inst vars (Point et al)
+                       2       = indexable objects with no inst vars (Array et al)
+                       3       = indexable objects with inst vars (MethodContext AdditionalMethodState et al)
+                       4       = weak indexable objects with inst vars (WeakArray et al)
+                       5       = weak non-indexable objects with inst vars (ephemerons) (Ephemeron)
+                       6       = unused
+                       7       = immediates (SmallInteger, Character)
+                       8       = unused
+                       9       = 64-bit indexable
+               10-11   = 32-bit indexable (Bitmap)
+               12-15   = 16-bit indexable
+               16-23   = 8-bit indexable
+               24-31   = compiled methods (CompiledMethod)"
+       ^self instSpec = 10!
-       "Answer true if the receiver is made of 32-bit instance variables."
-
-       ^self isBytes not!

Item was changed:
  ----- Method: Class>>variableByteSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
  variableByteSubclass: t instanceVariableNames: f
        classVariableNames: d poolDictionaries: s category: cat
        "This is the standard initialization message for creating a new class as a
        subclass of an existing class (the receiver) in which the subclass is to
+       have indexable 8-bit byte-sized nonpointer variables."
+       ^ClassBuilder new
-       have indexable byte-sized nonpointer variables."
-       ^(ClassBuilder new)
                superclass: self
                variableByteSubclass: t
                instanceVariableNames: f
                classVariableNames: d
                poolDictionaries: s
+               category: cat!
-               category: cat
- !

Item was changed:
  ----- Method: Class>>variableByteSubclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
  variableByteSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f
        classVariableNames: d poolDictionaries: s category: cat
        "This is the standard initialization message for creating a new class as a
        subclass of an existing class (the receiver) in which the subclass is to
+       have indexable 8-bit byte-sized nonpointer variables."
-       have indexable byte-sized nonpointer variables."

        | newClass copyOfOldClass |
        copyOfOldClass := self copy.
        newClass := self
                variableByteSubclass: t
                instanceVariableNames: f
                classVariableNames: d
                poolDictionaries: s
                category: cat.

        newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition.
        SystemChangeNotifier uniqueInstance
                classDefinitionChangedFrom: copyOfOldClass to: newClass.
+       ^newClass!
-       ^newClass
- !

Item was added:
+ ----- Method: Class>>variableDoubleByteSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
+ variableDoubleByteSubclass: t instanceVariableNames: f
+       classVariableNames: d poolDictionaries: s category: cat
+       "This is the standard initialization message for creating a new class as a
+       subclass of an existing class (the receiver) in which the subclass is to
+       have indexable 16-bit double byte-sized nonpointer variables."
+       ^ClassBuilder new
+               superclass: self
+               variableDoubleByteSubclass: t
+               instanceVariableNames: f
+               classVariableNames: d
+               poolDictionaries: s
+               category: cat!

Item was added:
+ ----- Method: Class>>variableDoubleByteSubclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
+ variableDoubleByteSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f
+       classVariableNames: d poolDictionaries: s category: cat
+       "This is the standard initialization message for creating a new class as a
+       subclass of an existing class (the receiver) in which the subclass is to
+       have indexable 16-bit double byte-sized nonpointer variables."
+
+       | newClass copyOfOldClass |
+       copyOfOldClass := self copy.
+       newClass := self
+               variableDoubleByteSubclass: t
+               instanceVariableNames: f
+               classVariableNames: d
+               poolDictionaries: s
+               category: cat.
+
+       newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition.
+       SystemChangeNotifier uniqueInstance
+               classDefinitionChangedFrom: copyOfOldClass to: newClass.
+       ^newClass!

Item was added:
+ ----- Method: Class>>variableDoubleWordSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
+ variableDoubleWordSubclass: t instanceVariableNames: f
+       classVariableNames: d poolDictionaries: s category: cat
+       "This is the standard initialization message for creating a new class as a
+       subclass of an existing class (the receiver) in which the subclass is to
+       have indexable 64-bit word-sized nonpointer variables."
+       ^ClassBuilder new
+               superclass: self
+               variableDoubleWordSubclass: t
+               instanceVariableNames: f
+               classVariableNames: d
+               poolDictionaries: s
+               category: cat!

Item was added:
+ ----- Method: Class>>variableDoubleWordSubclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
+ variableDoubleWordSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f
+       classVariableNames: d poolDictionaries: s category: cat
+       "This is the standard initialization message for creating a new class as a
+       subclass of an existing class (the receiver) in which the subclass is to
+       have indexable 64-bit word-sized nonpointer variables."
+
+       | newClass copyOfOldClass |
+       copyOfOldClass := self copy.
+       newClass := self
+               variableDoubleWordSubclass: t
+               instanceVariableNames: f
+               classVariableNames: d
+               poolDictionaries: s
+               category: cat.
+
+       newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition.
+       SystemChangeNotifier uniqueInstance
+               classDefinitionChangedFrom: copyOfOldClass to: newClass.
+       ^newClass!

Item was changed:
  ----- Method: Class>>variableWordSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
  variableWordSubclass: t instanceVariableNames: f
        classVariableNames: d poolDictionaries: s category: cat
        "This is the standard initialization message for creating a new class as a
        subclass of an existing class (the receiver) in which the subclass is to
+       have indexable 32-bit word-sized nonpointer variables."
+       ^ClassBuilder new
-       have indexable word-sized nonpointer variables."
-       ^(ClassBuilder new)
                superclass: self
                variableWordSubclass: t
                instanceVariableNames: f
                classVariableNames: d
                poolDictionaries: s
+               category: cat!
-               category: cat
- !

Item was changed:
  ----- Method: Class>>variableWordSubclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
  variableWordSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f
        classVariableNames: d poolDictionaries: s category: cat
        "This is the standard initialization message for creating a new class as a
        subclass of an existing class (the receiver) in which the subclass is to
+       have indexable 32-bit word-sized nonpointer variables."
-       have indexable word-sized nonpointer variables."

        | newClass copyOfOldClass |
        copyOfOldClass := self copy.
        newClass := self
                variableWordSubclass: t
                instanceVariableNames: f
                classVariableNames: d
                poolDictionaries: s
                category: cat.

        newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition.
        SystemChangeNotifier uniqueInstance
                classDefinitionChangedFrom: copyOfOldClass to: newClass.
+       ^newClass       !
-       ^newClass
- !

Item was changed:
  ----- Method: ClassBuilder>>superclass:variableByteSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'public') -----
  superclass: aClass
+       variableByteSubclass: t instanceVariableNames: f
-       variableByteSubclass: t instanceVariableNames: f
        classVariableNames: d poolDictionaries: s category: cat
+       "This is the standard initialization message for creating a new class as a subclass of an
+        existing class in which the subclass is to have indexable 8-bit byte-sized nonpointer variables."
-       "This is the standard initialization message for creating a new class as a
-       subclass of an existing class in which the subclass is to
-       have indexable byte-sized nonpointer variables."
        | oldClassOrNil actualType env |
+       aClass instSize > 0
-       (aClass instSize > 0)
                ifTrue: [^self error: 'cannot make a byte subclass of a class with named fields'].
+       (aClass isVariable and: [aClass isBytes not])
+               ifTrue: [^self error: 'cannot make an 8-bit byte subclass of a class with 16, 32 or 64 bit fields'].
-       (aClass isVariable and: [aClass isWords])
-               ifTrue: [^self error: 'cannot make a byte subclass of a class with word fields'].
        (aClass isVariable and: [aClass isPointers])
                ifTrue: [^self error: 'cannot make a byte subclass of a class with pointer fields'].
        oldClassOrNil := aClass environment at: t ifAbsent:[nil].
        actualType := (oldClassOrNil notNil
                                   and: [oldClassOrNil typeOfClass == #compiledMethod])
                                        ifTrue: [#compiledMethod]
                                        ifFalse: [#bytes].
        env := CurrentEnvironment signal ifNil: [aClass environment].
        ^self
                name: t
                inEnvironment: env
                subclassOf: aClass
                type: actualType
                instanceVariableNames: f
                classVariableNames: d
                poolDictionaries: s
                category: cat!

Item was added:
+ ----- Method: ClassBuilder>>superclass:variableDoubleByteSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'public') -----
+ superclass: aClass
+       variableDoubleByteSubclass: t instanceVariableNames: f
+       classVariableNames: d poolDictionaries: s category: cat
+       "This is the standard initialization message for creating a new class as a subclass of an
+        existing class in which the subclass is to have indexable 16-bit-sized nonpointer variables."
+       | oldClassOrNil env |
+       aClass instSize > 0
+               ifTrue: [^self error: 'cannot make a byte subclass of a class with named fields'].
+       (aClass isVariable and: [aClass isShorts not])
+               ifTrue: [^self error: 'cannot make a 16-bit short subclass of a class with 8, 32 or 64 bit fields'].
+       (aClass isVariable and: [aClass isPointers])
+               ifTrue: [^self error: 'cannot make a byte subclass of a class with pointer fields'].
+       oldClassOrNil := aClass environment at: t ifAbsent:[nil].
+       env := CurrentEnvironment signal ifNil: [aClass environment].
+       ^self
+               name: t
+               inEnvironment: env
+               subclassOf: aClass
+               type: #shorts
+               instanceVariableNames: f
+               classVariableNames: d
+               poolDictionaries: s
+               category: cat!

Item was added:
+ ----- Method: ClassBuilder>>superclass:variableDoubleWordSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'public') -----
+ superclass: aClass
+       variableDoubleWordSubclass: t instanceVariableNames: f
+       classVariableNames: d poolDictionaries: s category: cat
+       "This is the standard initialization message for creating a new class as a subclass of an
+        existing class in which the subclass is to have indexable 16-bit-sized nonpointer variables."
+       | oldClassOrNil env |
+       aClass instSize > 0
+               ifTrue: [^self error: 'cannot make a byte subclass of a class with named fields'].
+       (aClass isVariable and: [aClass isLongs not])
+               ifTrue: [^self error: 'cannot make a 64-bit long subclass of a class with 8, 16 or 32 bit fields'].
+       (aClass isVariable and: [aClass isPointers])
+               ifTrue: [^self error: 'cannot make a byte subclass of a class with pointer fields'].
+       oldClassOrNil := aClass environment at: t ifAbsent:[nil].
+       env := CurrentEnvironment signal ifNil: [aClass environment].
+       ^self
+               name: t
+               inEnvironment: env
+               subclassOf: aClass
+               type: #longs
+               instanceVariableNames: f
+               classVariableNames: d
+               poolDictionaries: s
+               category: cat!

Item was changed:
  ----- Method: ClassBuilder>>superclass:variableWordSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'public') -----
  superclass: aClass
        variableWordSubclass: t instanceVariableNames: f
        classVariableNames: d poolDictionaries: s category: cat
+       "This is the standard initialization message for creating a new class as a subclass of an
+        existing class in which the subclass is to have indexable 32-bit word-sized nonpointer variables."
-       "This is the standard initialization message for creating a new class as a
-       subclass of an existing class in which the subclass is to
-       have indexable word-sized nonpointer variables."
        | env |
+       aClass instSize > 0
-       (aClass instSize > 0)
                ifTrue: [^self error: 'cannot make a word subclass of a class with named fields'].
+       (aClass isVariable and: [aClass isWords not])
+               ifTrue: [^self error: 'cannot make a 32-bit word subclass of a class with 8, 16 or 64 bit fields'].
-       (aClass isVariable and: [aClass isBytes])
-               ifTrue: [^self error: 'cannot make a word subclass of a class with byte fields'].
        (aClass isVariable and: [aClass isPointers])
                ifTrue: [^self error: 'cannot make a word subclass of a class with pointer fields'].
        env := CurrentEnvironment signal ifNil: [aClass environment].
        ^self
                name: t
                inEnvironment: env
                subclassOf: aClass
                type: #words
                instanceVariableNames: f
                classVariableNames: d
                poolDictionaries: s
                category: cat!





Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Kernel-eem.1045.mcz

Eliot Miranda-2
Thanks for the heads up, Nicolas, I hadn't noticed.  I'll merge asap.

On Thu, Oct 13, 2016 at 11:26 AM, Nicolas Cellier <[hidden email]> wrote:
Hi Eliot,
did you see related changes in inbox?

2016-10-12 21:10 GMT+02:00 <[hidden email]>:
Eliot Miranda uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-eem.1045.mcz

==================== Summary ====================

Name: Kernel-eem.1045
Author: eem
Time: 12 October 2016, 12:10:33.006651 pm
UUID: d91d38c6-bb5b-4fcd-a28b-1bdbc867a33e
Ancestors: Kernel-nice.1044

Add support for creating DoubleByte (isShorts) and DoubleWord (isLongs) variable classes.

=============== Diff against Kernel-nice.1044 ===============

Item was changed:
  ----- Method: Behavior>>isBytes (in category 'testing') -----
  isBytes
+       "Answer whether the receiver's instances have indexed 8-bit integer instance variables.
-       "Answer whether the receiver has 8-bit instance variables.
         Above Cog Spur the class format is
                <5 bits inst spec><16 bits inst size>
         where the 5-bit inst spec is
                        0       = 0 sized objects (UndefinedObject True False et al)
                        1       = non-indexable objects with inst vars (Point et al)
                        2       = indexable objects with no inst vars (Array et al)
                        3       = indexable objects with inst vars (MethodContext AdditionalMethodState et al)
                        4       = weak indexable objects with inst vars (WeakArray et al)
                        5       = weak non-indexable objects with inst vars (ephemerons) (Ephemeron)
                        6       = unused
                        7       = immediates (SmallInteger, Character)
                        8       = unused
                        9       = 64-bit indexable
                10-11   = 32-bit indexable (Bitmap)
                12-15   = 16-bit indexable
                16-23   = 8-bit indexable
                24-31   = compiled methods (CompiledMethod)"
        ^self instSpec >= 16!

Item was added:
+ ----- Method: Behavior>>isLongs (in category 'testing') -----
+ isLongs
+       "Answer whether the receiver's instances have indexed 64-bit integer instance variables.
+        Above Cog Spur the class format is
+               <5 bits inst spec><16 bits inst size>
+        where the 5-bit inst spec is
+                       0       = 0 sized objects (UndefinedObject True False et al)
+                       1       = non-indexable objects with inst vars (Point et al)
+                       2       = indexable objects with no inst vars (Array et al)
+                       3       = indexable objects with inst vars (MethodContext AdditionalMethodState et al)
+                       4       = weak indexable objects with inst vars (WeakArray et al)
+                       5       = weak non-indexable objects with inst vars (ephemerons) (Ephemeron)
+                       6       = unused
+                       7       = immediates (SmallInteger, Character)
+                       8       = unused
+                       9       = 64-bit indexable
+               10-11   = 32-bit indexable (Bitmap)
+               12-15   = 16-bit indexable
+               16-23   = 8-bit indexable
+               24-31   = compiled methods (CompiledMethod)"
+       ^self instSpec = 9!

Item was added:
+ ----- Method: Behavior>>isShorts (in category 'testing') -----
+ isShorts
+       "Answer whether the receiver's instances have indexed 16-bit integer instance variables.
+        Above Cog Spur the class format is
+               <5 bits inst spec><16 bits inst size>
+        where the 5-bit inst spec is
+                       0       = 0 sized objects (UndefinedObject True False et al)
+                       1       = non-indexable objects with inst vars (Point et al)
+                       2       = indexable objects with no inst vars (Array et al)
+                       3       = indexable objects with inst vars (MethodContext AdditionalMethodState et al)
+                       4       = weak indexable objects with inst vars (WeakArray et al)
+                       5       = weak non-indexable objects with inst vars (ephemerons) (Ephemeron)
+                       6       = unused
+                       7       = immediates (SmallInteger, Character)
+                       8       = unused
+                       9       = 64-bit indexable
+               10-11   = 32-bit indexable (Bitmap)
+               12-15   = 16-bit indexable
+               16-23   = 8-bit indexable
+               24-31   = compiled methods (CompiledMethod)"
+       ^self instSpec = 12!

Item was changed:
  ----- Method: Behavior>>isWords (in category 'testing') -----
  isWords
+       "Answer whether the receiver's instances have indexed 32-bit integer instance variables.
+        Above Cog Spur the class format is
+               <5 bits inst spec><16 bits inst size>
+        where the 5-bit inst spec is
+                       0       = 0 sized objects (UndefinedObject True False et al)
+                       1       = non-indexable objects with inst vars (Point et al)
+                       2       = indexable objects with no inst vars (Array et al)
+                       3       = indexable objects with inst vars (MethodContext AdditionalMethodState et al)
+                       4       = weak indexable objects with inst vars (WeakArray et al)
+                       5       = weak non-indexable objects with inst vars (ephemerons) (Ephemeron)
+                       6       = unused
+                       7       = immediates (SmallInteger, Character)
+                       8       = unused
+                       9       = 64-bit indexable
+               10-11   = 32-bit indexable (Bitmap)
+               12-15   = 16-bit indexable
+               16-23   = 8-bit indexable
+               24-31   = compiled methods (CompiledMethod)"
+       ^self instSpec = 10!
-       "Answer true if the receiver is made of 32-bit instance variables."
-
-       ^self isBytes not!

Item was changed:
  ----- Method: Class>>variableByteSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
  variableByteSubclass: t instanceVariableNames: f
        classVariableNames: d poolDictionaries: s category: cat
        "This is the standard initialization message for creating a new class as a
        subclass of an existing class (the receiver) in which the subclass is to
+       have indexable 8-bit byte-sized nonpointer variables."
+       ^ClassBuilder new
-       have indexable byte-sized nonpointer variables."
-       ^(ClassBuilder new)
                superclass: self
                variableByteSubclass: t
                instanceVariableNames: f
                classVariableNames: d
                poolDictionaries: s
+               category: cat!
-               category: cat
- !

Item was changed:
  ----- Method: Class>>variableByteSubclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
  variableByteSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f
        classVariableNames: d poolDictionaries: s category: cat
        "This is the standard initialization message for creating a new class as a
        subclass of an existing class (the receiver) in which the subclass is to
+       have indexable 8-bit byte-sized nonpointer variables."
-       have indexable byte-sized nonpointer variables."

        | newClass copyOfOldClass |
        copyOfOldClass := self copy.
        newClass := self
                variableByteSubclass: t
                instanceVariableNames: f
                classVariableNames: d
                poolDictionaries: s
                category: cat.

        newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition.
        SystemChangeNotifier uniqueInstance
                classDefinitionChangedFrom: copyOfOldClass to: newClass.
+       ^newClass!
-       ^newClass
- !

Item was added:
+ ----- Method: Class>>variableDoubleByteSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
+ variableDoubleByteSubclass: t instanceVariableNames: f
+       classVariableNames: d poolDictionaries: s category: cat
+       "This is the standard initialization message for creating a new class as a
+       subclass of an existing class (the receiver) in which the subclass is to
+       have indexable 16-bit double byte-sized nonpointer variables."
+       ^ClassBuilder new
+               superclass: self
+               variableDoubleByteSubclass: t
+               instanceVariableNames: f
+               classVariableNames: d
+               poolDictionaries: s
+               category: cat!

Item was added:
+ ----- Method: Class>>variableDoubleByteSubclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
+ variableDoubleByteSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f
+       classVariableNames: d poolDictionaries: s category: cat
+       "This is the standard initialization message for creating a new class as a
+       subclass of an existing class (the receiver) in which the subclass is to
+       have indexable 16-bit double byte-sized nonpointer variables."
+
+       | newClass copyOfOldClass |
+       copyOfOldClass := self copy.
+       newClass := self
+               variableDoubleByteSubclass: t
+               instanceVariableNames: f
+               classVariableNames: d
+               poolDictionaries: s
+               category: cat.
+
+       newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition.
+       SystemChangeNotifier uniqueInstance
+               classDefinitionChangedFrom: copyOfOldClass to: newClass.
+       ^newClass!

Item was added:
+ ----- Method: Class>>variableDoubleWordSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
+ variableDoubleWordSubclass: t instanceVariableNames: f
+       classVariableNames: d poolDictionaries: s category: cat
+       "This is the standard initialization message for creating a new class as a
+       subclass of an existing class (the receiver) in which the subclass is to
+       have indexable 64-bit word-sized nonpointer variables."
+       ^ClassBuilder new
+               superclass: self
+               variableDoubleWordSubclass: t
+               instanceVariableNames: f
+               classVariableNames: d
+               poolDictionaries: s
+               category: cat!

Item was added:
+ ----- Method: Class>>variableDoubleWordSubclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
+ variableDoubleWordSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f
+       classVariableNames: d poolDictionaries: s category: cat
+       "This is the standard initialization message for creating a new class as a
+       subclass of an existing class (the receiver) in which the subclass is to
+       have indexable 64-bit word-sized nonpointer variables."
+
+       | newClass copyOfOldClass |
+       copyOfOldClass := self copy.
+       newClass := self
+               variableDoubleWordSubclass: t
+               instanceVariableNames: f
+               classVariableNames: d
+               poolDictionaries: s
+               category: cat.
+
+       newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition.
+       SystemChangeNotifier uniqueInstance
+               classDefinitionChangedFrom: copyOfOldClass to: newClass.
+       ^newClass!

Item was changed:
  ----- Method: Class>>variableWordSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
  variableWordSubclass: t instanceVariableNames: f
        classVariableNames: d poolDictionaries: s category: cat
        "This is the standard initialization message for creating a new class as a
        subclass of an existing class (the receiver) in which the subclass is to
+       have indexable 32-bit word-sized nonpointer variables."
+       ^ClassBuilder new
-       have indexable word-sized nonpointer variables."
-       ^(ClassBuilder new)
                superclass: self
                variableWordSubclass: t
                instanceVariableNames: f
                classVariableNames: d
                poolDictionaries: s
+               category: cat!
-               category: cat
- !

Item was changed:
  ----- Method: Class>>variableWordSubclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
  variableWordSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f
        classVariableNames: d poolDictionaries: s category: cat
        "This is the standard initialization message for creating a new class as a
        subclass of an existing class (the receiver) in which the subclass is to
+       have indexable 32-bit word-sized nonpointer variables."
-       have indexable word-sized nonpointer variables."

        | newClass copyOfOldClass |
        copyOfOldClass := self copy.
        newClass := self
                variableWordSubclass: t
                instanceVariableNames: f
                classVariableNames: d
                poolDictionaries: s
                category: cat.

        newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition.
        SystemChangeNotifier uniqueInstance
                classDefinitionChangedFrom: copyOfOldClass to: newClass.
+       ^newClass       !
-       ^newClass
- !

Item was changed:
  ----- Method: ClassBuilder>>superclass:variableByteSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'public') -----
  superclass: aClass
+       variableByteSubclass: t instanceVariableNames: f
-       variableByteSubclass: t instanceVariableNames: f
        classVariableNames: d poolDictionaries: s category: cat
+       "This is the standard initialization message for creating a new class as a subclass of an
+        existing class in which the subclass is to have indexable 8-bit byte-sized nonpointer variables."
-       "This is the standard initialization message for creating a new class as a
-       subclass of an existing class in which the subclass is to
-       have indexable byte-sized nonpointer variables."
        | oldClassOrNil actualType env |
+       aClass instSize > 0
-       (aClass instSize > 0)
                ifTrue: [^self error: 'cannot make a byte subclass of a class with named fields'].
+       (aClass isVariable and: [aClass isBytes not])
+               ifTrue: [^self error: 'cannot make an 8-bit byte subclass of a class with 16, 32 or 64 bit fields'].
-       (aClass isVariable and: [aClass isWords])
-               ifTrue: [^self error: 'cannot make a byte subclass of a class with word fields'].
        (aClass isVariable and: [aClass isPointers])
                ifTrue: [^self error: 'cannot make a byte subclass of a class with pointer fields'].
        oldClassOrNil := aClass environment at: t ifAbsent:[nil].
        actualType := (oldClassOrNil notNil
                                   and: [oldClassOrNil typeOfClass == #compiledMethod])
                                        ifTrue: [#compiledMethod]
                                        ifFalse: [#bytes].
        env := CurrentEnvironment signal ifNil: [aClass environment].
        ^self
                name: t
                inEnvironment: env
                subclassOf: aClass
                type: actualType
                instanceVariableNames: f
                classVariableNames: d
                poolDictionaries: s
                category: cat!

Item was added:
+ ----- Method: ClassBuilder>>superclass:variableDoubleByteSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'public') -----
+ superclass: aClass
+       variableDoubleByteSubclass: t instanceVariableNames: f
+       classVariableNames: d poolDictionaries: s category: cat
+       "This is the standard initialization message for creating a new class as a subclass of an
+        existing class in which the subclass is to have indexable 16-bit-sized nonpointer variables."
+       | oldClassOrNil env |
+       aClass instSize > 0
+               ifTrue: [^self error: 'cannot make a byte subclass of a class with named fields'].
+       (aClass isVariable and: [aClass isShorts not])
+               ifTrue: [^self error: 'cannot make a 16-bit short subclass of a class with 8, 32 or 64 bit fields'].
+       (aClass isVariable and: [aClass isPointers])
+               ifTrue: [^self error: 'cannot make a byte subclass of a class with pointer fields'].
+       oldClassOrNil := aClass environment at: t ifAbsent:[nil].
+       env := CurrentEnvironment signal ifNil: [aClass environment].
+       ^self
+               name: t
+               inEnvironment: env
+               subclassOf: aClass
+               type: #shorts
+               instanceVariableNames: f
+               classVariableNames: d
+               poolDictionaries: s
+               category: cat!

Item was added:
+ ----- Method: ClassBuilder>>superclass:variableDoubleWordSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'public') -----
+ superclass: aClass
+       variableDoubleWordSubclass: t instanceVariableNames: f
+       classVariableNames: d poolDictionaries: s category: cat
+       "This is the standard initialization message for creating a new class as a subclass of an
+        existing class in which the subclass is to have indexable 16-bit-sized nonpointer variables."
+       | oldClassOrNil env |
+       aClass instSize > 0
+               ifTrue: [^self error: 'cannot make a byte subclass of a class with named fields'].
+       (aClass isVariable and: [aClass isLongs not])
+               ifTrue: [^self error: 'cannot make a 64-bit long subclass of a class with 8, 16 or 32 bit fields'].
+       (aClass isVariable and: [aClass isPointers])
+               ifTrue: [^self error: 'cannot make a byte subclass of a class with pointer fields'].
+       oldClassOrNil := aClass environment at: t ifAbsent:[nil].
+       env := CurrentEnvironment signal ifNil: [aClass environment].
+       ^self
+               name: t
+               inEnvironment: env
+               subclassOf: aClass
+               type: #longs
+               instanceVariableNames: f
+               classVariableNames: d
+               poolDictionaries: s
+               category: cat!

Item was changed:
  ----- Method: ClassBuilder>>superclass:variableWordSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'public') -----
  superclass: aClass
        variableWordSubclass: t instanceVariableNames: f
        classVariableNames: d poolDictionaries: s category: cat
+       "This is the standard initialization message for creating a new class as a subclass of an
+        existing class in which the subclass is to have indexable 32-bit word-sized nonpointer variables."
-       "This is the standard initialization message for creating a new class as a
-       subclass of an existing class in which the subclass is to
-       have indexable word-sized nonpointer variables."
        | env |
+       aClass instSize > 0
-       (aClass instSize > 0)
                ifTrue: [^self error: 'cannot make a word subclass of a class with named fields'].
+       (aClass isVariable and: [aClass isWords not])
+               ifTrue: [^self error: 'cannot make a 32-bit word subclass of a class with 8, 16 or 64 bit fields'].
-       (aClass isVariable and: [aClass isBytes])
-               ifTrue: [^self error: 'cannot make a word subclass of a class with byte fields'].
        (aClass isVariable and: [aClass isPointers])
                ifTrue: [^self error: 'cannot make a word subclass of a class with pointer fields'].
        env := CurrentEnvironment signal ifNil: [aClass environment].
        ^self
                name: t
                inEnvironment: env
                subclassOf: aClass
                type: #words
                instanceVariableNames: f
                classVariableNames: d
                poolDictionaries: s
                category: cat!









--
_,,,^..^,,,_
best, Eliot