[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
|