[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