[squeak-dev] The Trunk: Collections-fbs.482.mcz

Levente Uzonyi leves at elte.hu
Sat Aug 4 04:21:57 UTC 2012


On Fri, 3 Aug 2012, commits at source.squeak.org wrote:

> Frank Shearar uploaded a new version of Collections to project The Trunk:
> http://source.squeak.org/trunk/Collections-fbs.482.mcz
>
> ==================== Summary ====================
>
> Name: Collections-fbs.482
> Author: fbs
> Time: 3 August 2012, 9:26:33.402 pm
> UUID: f236f58a-ba49-4c8c-8314-731f82206158
> Ancestors: Collections-ael.481
>
> Merge Collections-ael.481
>
> remove spurious sharing of associations between a dictionary and another created from it

I vaguely recall that the sharing is/was necessary for the compiler to 
work properly. I'm not sure if it's still true (or if it was ever true). 
Let's hope the tests will cover this case.


Levente

>
> =============== Diff against Collections-cwp.480 ===============
>
> Item was changed:
>  ----- Method: Dictionary class>>newFrom: (in category 'instance creation') -----
>  newFrom: aDict
>  	"Answer an instance of me containing the same associations as aDict.
>  	 Error if any key appears twice."
>  	| newDictionary |
>  	newDictionary := self new: aDict size.
>  	aDict associationsDo:
>  		[:x |
>  		(newDictionary includesKey: x key)
>  			ifTrue: [self error: 'Duplicate key: ', x key printString]
> + 			ifFalse: [newDictionary add: x copy]].
> - 			ifFalse: [newDictionary add: x]].
>  	^ newDictionary
>
>  "	NewDictionary newFrom: {1->#a. 2->#b. 3->#c}
>  	{1->#a. 2->#b. 3->#c} as: NewDictionary
>  	NewDictionary newFrom: {1->#a. 2->#b. 1->#c}
>  	{1->#a. 2->#b. 1->#c} as: NewDictionary
>  "!
>
> Item was added:
> + ----- Method: WeakRegistry class>>migrateOldRegistries (in category 'migrating registry') -----
> + migrateOldRegistries
> + 	Smalltalk at: #WeakFinalizationRegistry ifAbsent: [ ^ self "already done" ].
> +
> + 	Smalltalk recreateSpecialObjectsArray.
> + 	WeakArray restartFinalizationProcess.
> +
> + 	Smalltalk garbageCollect; garbageCollect.
> +
> + 	"leave no chance to interrupt migration"
> + 	Compiler evaluate: '
> + 	[ | old new oldClass newClass |
> + 		old := OrderedCollection new.
> + 		new := OrderedCollection new.
> + 		WeakRegistry allInstancesDo: [:registry | | newr |
> + 			old add: registry.
> + 			newr := WeakFinalizationRegistry basicNew initialize.
> + 			registry migrateTo: newr.
> + 			new add: newr ].
> + 		old asArray elementsForwardIdentityTo: new asArray.
> +
> + 		oldClass := WeakRegistry.
> + 		newClass := WeakFinalizationRegistry.
> +
> + 		Smalltalk forgetClass: newClass logged: false.
> + 		newClass superclass removeSubclass: newClass.
> + 		newClass setName: #WeakRegistry.
> + 		oldClass becomeForward: newClass.
> + 	] forkAt: Processor highestPriority.
> + 	'.
> + !
>
>
>


More information about the Squeak-dev mailing list