Resending because the last was HTML'd:

Never use #newFrom: with associations from another dictonary if you reuse the 
first after.
 
The bug is actually deeper than you know:
dic1 := Dictionary newFrom:{'test' -> 4}.
dic2 := IdentityDictionary newFrom: {'test' copy -> 4}.
dic1 = dic2.
dic2 = dic1.
 
Depending on the order, they are equal or inequal.
 
The bug is caused by Dictionary>>= using a polymorphic type test #isDictionary. 
Squeak is unaffected: its #= uses a hardcoded class == test. The least 
disruptive fix I can think of is adding another type test #isIdentityDictionary 
in Dictionary that returns false but returns true for every identity dictionary 
class (like SmalllIdentityDictionary). Then only compare the associations if 
"self isIdentityDictionary = aDictionary isIdentityDictionary".
 
I will open an issue.

Reply via email to