[squeak-dev] The Trunk: System-cmm.689.mcz

Chris Muller asqueaker at gmail.com
Wed Nov 12 21:40:44 UTC 2014


I finally tracked down why the keys of the #knownEnvironments
Dictionary were changing when trying to build an image in Spur.

It's because, in my core-extensions package, I override
UndefinedObject>>#hash to have hard-coded value independent of its
#identityHash, to be safer with distributed systems which may be using
nil in a hash calculation -- in case they would be different due to
accessing with a Spur image, for example.

Such a hash calculation is made for the keys of the #knownEnvironments
Dictionary when the country's are nil.  By the different hash value in
Spur, the image would lock when trying to load my core-extensions
package, because it tried to access knownEnvironments as part of the
load-operation itself.

The least-lazy way to "fix" it was to ensure something is populated in
the LocaleID's 'country's.  Whew!

Anyway, something to be aware of -- anywhere we have true, false or
nil used in a hash calculation, now has a different hash in Spur vs.
Cog.  Maybe we should think about separating those objects' logical
"value" hash from their identityHash in trunk..?  That could be useful
when we move to 64-bit someday..

On Wed, Nov 12, 2014 at 3:26 PM,  <commits at source.squeak.org> wrote:
> Chris Muller uploaded a new version of System to project The Trunk:
> http://source.squeak.org/trunk/System-cmm.689.mcz
>
> ==================== Summary ====================
>
> Name: System-cmm.689
> Author: cmm
> Time: 12 November 2014, 3:19:56.156 pm
> UUID: a1ffba24-42ff-4391-9387-4e8ee20e6b2a
> Ancestors: System-ul.688
>
> Populate all LocaleID's 'country's.
>
> =============== Diff against System-ul.688 ===============
>
> Item was added:
> + ----- Method: LocaleID class>>countryFor: (in category 'accessing') -----
> + countryFor: iso6391Code
> +       "http://www.loc.gov/standards/iso639-2/php/code_list.php"
> +       ^ iso6391Code
> +               caseOf:
> +                       { ['af'] -> ['Afrikaans'].
> +                       ['ca'] -> ['Catalan'].
> +                       ['cs'] -> [ 'Czech'].
> +                       ['da'] -> [ 'Danish'].
> +                       ['de'] -> [ 'German'].
> +                       ['el'] -> [ 'Greek Modern'].
> +                       ['en'] -> [ 'English'].
> +                       ['es'] -> [ 'Spanish'].
> +                       ['eu'] -> [ 'Basque'].
> +                       ['fi'] -> [ 'Finnish'].
> +                       ['fo'] -> [ 'Faroese'].
> +                       ['fr'] -> [ 'French'].
> +                       ['ga'] -> [ 'Irish'].
> +                       ['gd'] -> [ 'Gaelic'].
> +                       ['hr'] -> [ 'Croatian'].
> +                       ['hu'] -> [ 'Hungarian'].
> +                       ['is'] -> [ 'Icelandic'].
> +                       ['it'] -> [ 'Italian'].
> +                       ['ja'] -> [ 'Japanese'].
> +                       ['ja-etoys'] -> [ 'Japanese'].
> +                       ['ko'] -> [ 'Korean'].
> +                       ['nl'] -> [ 'Dutch'].
> +                       ['no'] -> [ 'Norwegian'].
> +                       ['pt'] -> [ 'Portuguese'].
> +                       ['rm'] -> [ 'Romansh'].
> +                       ['ro'] -> [ 'Romainian'].
> +                       ['sk'] -> [ 'Slovak'].
> +                       ['sl'] -> [ 'Slovenian'].
> +                       ['sq'] -> [ 'Albanian'].
> +                       ['sv'] -> [ 'Swedish'].
> +                       ['sw'] -> [ 'Swahili'].
> +                       ['zh'] -> [ 'Chinese'] }
> +               otherwise:
> +                       [ 'other' ]!
>
> Item was changed:
>   ----- Method: LocaleID>>isoLanguage:isoCountry: (in category 'initialize') -----
> + isoLanguage: langString isoCountry: countryStringOrNil
> - isoLanguage: langString isoCountry: countryStringOrNil
>         isoLanguage := langString.
> +       isoCountry := countryStringOrNil ifNil: (self class countryFor: langString)!
> -       isoCountry := countryStringOrNil!
>
> Item was changed:
>   (PackageInfo named: 'System') postscript: '"Preferences already removed by hand, but whose state still lingers:"
> + LocaleID allInstances do:
> +       [ : each | each
> +               isoLanguage: each isoLanguage
> +               isoCountry: (each isoCountry ifNil: [ each isoCountry ]) ].
> + LanguageEnvironment knownEnvironments rehash'!
> - Preferences removePreference: #upgradeIsMerge.
> - Preferences removePreference: #colorWhenPrettyPrinting.
> - Preferences removePreference: #promptForUpdateServer.
> - Preferences removePreference: #updateSavesFile.
> - Preferences removePreference: #updateFromServerAtStartup.'!
>
>


More information about the Squeak-dev mailing list