[squeak-dev] The Trunk: Collections-fbs.482.mcz
Frank Shearar
frank.shearar at gmail.com
Sat Aug 4 08:14:42 UTC 2012
On 4 August 2012 05:21, Levente Uzonyi <leves at elte.hu> wrote:
> 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.
Compiler tests show green, for what it's worth.
frank
> 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
|