[squeak-dev] The Trunk: Traits-ul.310.mcz

commits at source.squeak.org commits at source.squeak.org
Sun Mar 12 21:38:53 UTC 2017


Levente Uzonyi uploaded a new version of Traits to project The Trunk:
http://source.squeak.org/trunk/Traits-ul.310.mcz

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

Name: Traits-ul.310
Author: ul
Time: 12 March 2017, 10:34:00.66933 pm
UUID: 043b54f5-c26f-466b-acb5-9ed3da5ff06c
Ancestors: Traits-jr.309

- introduced TraitComposition >> #collectAsTraitComposition: as a workaround to the fact that TraitComposition is a subclass of OrderedCollection
- use #collectAsTraitComposition: instead of #collect: where the expected result is a TraitComposition

=============== Diff against Traits-jr.309 ===============

Item was changed:
  ----- Method: ClassDescription>>updateTraitsFrom: (in category '*Traits-NanoKernel') -----
  updateTraitsFrom: instanceTraits
  	"ClassTrait/Metaclass only. Update me from the given instance traits"
  	| map newTraits |
  	self isMeta ifFalse:[self error: 'This is a metaclass operation'].
  	map := Dictionary new.
  	self traitComposition do:[:composed| map at: composed trait put: composed].
+ 	newTraits := (instanceTraits collectAsTraitComposition:[:composed| | trait |
- 	newTraits := (instanceTraits collect:[:composed| | trait |
  		trait := composed trait classTrait.
  		map at: trait ifAbsent:[trait]] 
  	), (self traitComposition select:[:comp| comp trait isBaseTrait]).
  
  	self installTraitsFrom: newTraits!

Item was changed:
  ----- Method: Trait class>>storeTraitInfoInClass: (in category 'load-unload') -----
  storeTraitInfoInClass: aClass
  	"Store trait information in the given class"
  	| code |
  	code := WriteStream on: (String new: 100).
  	code nextPutAll: 'traitInfo
  	"This method contains information to restore the trait structure
  	for the receiver when traits are loaded or unloaded"'.
  	aClass isTrait ifTrue:[
  		code crtab; nextPutAll: '"This class was originally a trait"'.
  		code crtab; nextPutAll: '<traitDefinition: true>'.
  	].
  	aClass hasTraitComposition ifTrue:[
  		code crtab; nextPutAll: '"The trait composition for the receiver"'.
  		code crtab; nextPutAll: '<traitComposition: ', aClass traitCompositionString storeString,'>'.
  		code crtab; nextPutAll: '"The required traits for this trait"'.
+ 		code crtab; nextPutAll: '<traitRequires: ', (aClass traits collectAsTraitComposition: [:t| t baseTrait name]),'>'.
- 		code crtab; nextPutAll: '<traitRequires: ', (aClass traits collect:[:t| t baseTrait name]),'>'.
  	].
  	aClass compile: code contents.
  !

Item was changed:
  ----- Method: TraitAlias>>initializeFrom: (in category 'initialize-release') -----
  initializeFrom: anArrayOfAssociations
  	| newNames |
+ 	newNames := anArrayOfAssociations collect: [:each | each key] as: IdentitySet.
- 	newNames := (anArrayOfAssociations collect: [:each | each key]) asIdentitySet.
  	newNames size < anArrayOfAssociations size ifTrue: [
  		TraitCompositionException signal: 'Cannot use the same alias name twice'].
  	anArrayOfAssociations do: [:each |
  		(newNames includes: each value) ifTrue: [
  			TraitCompositionException signal: 'Cannot define an alias for an alias']].
  	aliases := anArrayOfAssociations.
  !

Item was added:
+ ----- Method: TraitComposition>>collectAsTraitComposition: (in category 'accessing') -----
+ collectAsTraitComposition: aBlock
+ 
+ 	^self collect: aBlock as: TraitComposition!

Item was changed:
  ----- Method: TraitComposition>>copyTraitExpression (in category 'operations') -----
  copyTraitExpression
  	"Copy all except the actual traits"
+ 	^self collectAsTraitComposition:[:each| each copyTraitExpression].!
- 	^self collect:[:each| each copyTraitExpression].!

Item was changed:
  ----- Method: TraitComposition>>traitsCollect: (in category 'accessing') -----
  traitsCollect: aBlock
+ 	^self collectAsTraitComposition: [:each| each traitsDo: aBlock]!
- 	^self collect: [:each| each traitsDo: aBlock]!



More information about the Squeak-dev mailing list