[squeak-dev] The Trunk: Kernel-nice.1039.mcz

commits at source.squeak.org commits at source.squeak.org
Thu Oct 20 20:00:19 UTC 2016


Nicolas Cellier uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-nice.1039.mcz

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

Name: Kernel-nice.1039
Author: nice
Time: 20 September 2016, 11:00:27.302558 pm
UUID: b0aeabf6-f73d-44c4-be8b-d2c66a73486f
Ancestors: Kernel-bf.1038

Introduce HalfWord (16 bits) and DoubleWord (64 bits) subclasses which are possible in Spur format, but yet not exploited.

=============== Diff against Kernel-bf.1038 ===============

Item was added:
+ ----- Method: Behavior>>isDoubleWords (in category 'testing') -----
+ isDoubleWords
+ 	"Answer true if the receiver is made of 64-bit instance variables."
+ 
+ 	^self instSpec = 2r1001!

Item was added:
+ ----- Method: Behavior>>isHalfWords (in category 'testing') -----
+ isHalfWords
+ 	"Answer true if the receiver is made of 16-bit instance variables."
+ 
+ 	^(self instSpec bitAnd: 2r11100) = 2r1100!

Item was changed:
  ----- Method: Behavior>>isWords (in category 'testing') -----
  isWords
  	"Answer true if the receiver is made of 32-bit instance variables."
  
+ 	^(self instSpec bitAnd: 2r11110) = 2r1010!
- 	^self isBytes not!

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 double-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 double-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 added:
+ ----- Method: Class>>variableHalfWordSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
+ variableHalfWordSubclass: 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 half-word-sized nonpointer variables."
+ 	^(ClassBuilder new)
+ 		superclass: self
+ 		variableHalfWordSubclass: t
+ 		instanceVariableNames: f
+ 		classVariableNames: d
+ 		poolDictionaries: s
+ 		category: cat
+ !

Item was added:
+ ----- Method: Class>>variableHalfWordSubclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
+ variableHalfWordSubclass: 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 half-word-sized nonpointer variables."
+ 	
+ 	| newClass copyOfOldClass |
+ 	copyOfOldClass := self copy.
+ 	newClass := self
+ 		variableHalfWordSubclass: t 
+ 		instanceVariableNames: f
+ 		classVariableNames: d
+ 		poolDictionaries: s
+ 		category: cat.
+ 	
+ 	newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition.
+ 	SystemChangeNotifier uniqueInstance
+ 		classDefinitionChangedFrom: copyOfOldClass to: newClass.
+ 	^newClass!

Item was changed:
  ----- Method: ClassBuilder>>superclass:variableByteSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'public') -----
  superclass: aClass
  	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 byte-sized nonpointer variables."
  	| oldClassOrNil actualType env |
  	(aClass instSize > 0)
  		ifTrue: [^self error: 'cannot make a byte subclass of a class with named fields'].
  	(aClass isVariable and: [aClass isWords])
  		ifTrue: [^self error: 'cannot make a byte subclass of a class with word fields'].
+ 	(aClass isVariable and: [aClass isHalfWords])
+ 		ifTrue: [^self error: 'cannot make a byte subclass of a class with half word fields'].
+ 	(aClass isVariable and: [aClass isDoubleWords])
+ 		ifTrue: [^self error: 'cannot make a byte subclass of a class with double 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: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 double-word-sized nonpointer variables."
+ 	| env |
+ 	(aClass instSize > 0)
+ 		ifTrue: [^self error: 'cannot make a double word subclass of a class with named fields'].
+ 	(aClass isVariable and: [aClass isBytes])
+ 		ifTrue: [^self error: 'cannot make a double word subclass of a class with byte fields'].
+ 	(aClass isVariable and: [aClass isHalfWords])
+ 		ifTrue: [^self error: 'cannot make a double word subclass of a class with half word fields'].
+ 	(aClass isVariable and: [aClass isWords])
+ 		ifTrue: [^self error: 'cannot make a double word subclass of a class with word fields'].
+ 	(aClass isVariable and: [aClass isPointers])
+ 		ifTrue: [^self error: 'cannot make a double word subclass of a class with pointer fields'].
+ 	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 added:
+ ----- Method: ClassBuilder>>superclass:variableHalfWordSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'public') -----
+ superclass: aClass
+ 	variableHalfWordSubclass: 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 half-word-sized nonpointer variables."
+ 	| env |
+ 	(aClass instSize > 0)
+ 		ifTrue: [^self error: 'cannot make a half word subclass of a class with named fields'].
+ 	(aClass isVariable and: [aClass isBytes])
+ 		ifTrue: [^self error: 'cannot make a half word subclass of a class with byte fields'].
+ 	(aClass isVariable and: [aClass isWords])
+ 		ifTrue: [^self error: 'cannot make a half word subclass of a class with word fields'].
+ 	(aClass isVariable and: [aClass isDoubleWords])
+ 		ifTrue: [^self error: 'cannot make a half word subclass of a class with double word fields'].
+ 	(aClass isVariable and: [aClass isPointers])
+ 		ifTrue: [^self error: 'cannot make a half word subclass of a class with pointer fields'].
+ 	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 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 word-sized nonpointer variables."
  	| env |
  	(aClass instSize > 0)
  		ifTrue: [^self error: 'cannot make a word subclass of a class with named fields'].
  	(aClass isVariable and: [aClass isBytes])
  		ifTrue: [^self error: 'cannot make a word subclass of a class with byte fields'].
+ 	(aClass isVariable and: [aClass isHalfWords])
+ 		ifTrue: [^self error: 'cannot make a word subclass of a class with half word fields'].
+ 	(aClass isVariable and: [aClass isDoubleWords])
+ 		ifTrue: [^self error: 'cannot make a word subclass of a class with double word 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!



More information about the Squeak-dev mailing list