[squeak-dev] The Trunk: Monticello-dtl.682.mcz
David T. Lewis
lewis at mail.msen.com
Sun May 13 23:29:29 UTC 2018
This update feels a bit hacky to me with its test for a specific selector, so
better or clearer solutions are welcome. Meanwhile, the prior behavior was
corrupting identity dictionaries, which seems like a Bad Thing, so I put
this fix (along with a new unit test) directly into trunk.
The problem showed up as I was trying to get SystemTracer64 working again on
V3 images, so it was not an easy thing to debug :-/
Dave
On Sun, May 13, 2018 at 11:14:39PM +0000, commits at source.squeak.org wrote:
> 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 Squeak-dev
mailing list
|