[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