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@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.'!
>
>