[Pkg] The Trunk: Monticello-dtl.682.mcz
commits at source.squeak.org
commits at source.squeak.org
Sun May 13 23:14:39 UTC 2018
David T. Lewis uploaded a new version of Monticello to project The Trunk:
http://source.squeak.org/trunk/Monticello-dtl.682.mcz
==================== Summary ====================
Name: Monticello-dtl.682
Author: dtl
Time: 13 May 2018, 7:14:27.068827 pm
UUID: 76fc84e6-7e2b-4a6a-af6b-2d02d11c38eb
Ancestors: Monticello-nice.681
Sending perform: #== with: anObject to an instance of MCPackageInEnvironment should test identity of the actual instance, not the MCPackage to which it refers. If this is not so, a PluggableDictionary will fail when doing identity checks on its keys, as is the case for a SystemTracer adding all objects to its oop dictionary.
Implement MCPackageInEnvironment>>perform:with: such that performing #== will call primitivePerform, and all other selectors are delegated to the MCPackage as before.
=============== Diff against Monticello-nice.681 ===============
Item was added:
+ ----- Method: MCPackageInEnvironment>>perform:with: (in category 'delegating') -----
+ perform: aSymbol with: anObject
+ "If aSymbol is #== then the sender is trying to perform an identity comparison.
+ This cannot be delegated, because the delegate will be a different object.
+ Implement perform:with: here to protect for this case. An important example
+ is the case of PluggableDictionary, which relies on perform:with: to implement
+ comparisons for an identity dictionary."
+
+ aSymbol == #==
+ ifTrue: [ ^self privatePerform: aSymbol with: anObject ]
+ ifFalse: [ ^package perform: aSymbol with: anObject "as per doesNotUnderStand:" ]
+ !
Item was added:
+ ----- Method: MCPackageInEnvironment>>privatePerform:with: (in category 'delegating') -----
+ privatePerform: aSymbol with: anObject
+ "aSymbol is #== and the sender is trying to perform an identity comparison.
+ Invoke primitivePerform."
+
+ <primitive: 83>
+ ^ self primitiveFailed!
More information about the Packages
mailing list