Marcel Taeumel uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-mt.1431.mcz
==================== Summary ====================
Name: Morphic-mt.1431
Author: mt
Time: 15 May 2018, 6:28:31.290184 pm
UUID: 5d3be43c-b155-8547-93f7-23d355c228be
Ancestors: Morphic-kfr.1430
Fixes a regression with "aBorderedMorph borderColor: nil"... which used to work fine... ;-)
=============== Diff against Morphic-kfr.1430 ===============
Item was changed:
----- Method: BorderedMorph>>borderStyle: (in category 'accessing') -----
borderStyle: aBorderStyle
super borderStyle: aBorderStyle.
self flag: #compatibility. "mt: For older code, update the instance variables. Should be removed in the future."
+ borderWidth := self borderStyle width.
+ borderColor := self borderStyle color.!
- borderWidth := aBorderStyle width.
- borderColor := aBorderStyle color.!
Marcel Taeumel uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-mt.1429.mcz
==================== Summary ====================
Name: Morphic-mt.1429
Author: mt
Time: 14 May 2018, 9:24:54.700483 am
UUID: 2b19986c-dd7d-174c-9e03-4869894dbed8
Ancestors: Morphic-mt.1428
Fixes representation of Text instances in Object Explorer.
=============== Diff against Morphic-mt.1428 ===============
Item was added:
+ ----- Method: Text>>explorerContents (in category '*Morphic-Explorer') -----
+ explorerContents
+
+ ^ (self class allInstVarNames asOrderedCollection withIndexCollect: [:each :index |
+ ObjectExplorerWrapper
+ with: (self instVarAt: index)
+ name: each
+ model: self])!
David T. Lewis uploaded a new version of Monticello to project The Trunk:
http://source.squeak.org/trunk/Monticello-dtl.683.mcz
==================== Summary ====================
Name: Monticello-dtl.683
Author: dtl
Time: 13 May 2018, 9:26:12.696956 pm
UUID: 03d28d79-4c73-496f-903d-324e4425c61f
Ancestors: Monticello-dtl.682
Revert last update, which was based on bad assumptions about how a proxy should behave (thanks Levente).
If a proxy doesn't want to forward a message, it can just implement the method. If you want direct access to the proxy object, you can use the mirror primitives.
=============== Diff against Monticello-dtl.682 ===============
Item was removed:
- ----- 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 removed:
- ----- 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!
David T. Lewis uploaded a new version of Tests to project The Trunk:
http://source.squeak.org/trunk/Tests-dtl.396.mcz
==================== Summary ====================
Name: Tests-dtl.396
Author: dtl
Time: 13 May 2018, 9:25:11.98605 pm
UUID: 5caece86-0310-4cd3-8e10-9e80d1d28c49
Ancestors: Tests-dtl.395
Revert last update, which was based on bad assumptions about how a proxy should behave (thanks Levente).
If a proxy doesn't want to forward a message, it can just implement the method. If you want direct access to the proxy object, you can use the mirror primitives.
=============== Diff against Tests-dtl.395 ===============
Item was removed:
- MCTestCase subclass: #MCPackageInEnvironmentTest
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Tests-Monticello'!
Item was removed:
- ----- Method: MCPackageInEnvironmentTest>>testPerformIdentityEquals (in category 'testing') -----
- testPerformIdentityEquals
- "Verify that #perform:with: can be used to send #== for identity test. Required
- for identity test in PluggableDictionary. Delegation to the MCPackage does not
- work in that case because the package is a different object."
-
- | aProtoObj |
- aProtoObj :=MCPackageInEnvironment
- decorating: (MCPackage new name: 'No Name Yet')
- in: Environment default.
- self assert: [aProtoObj == aProtoObj]
- description: 'Direct test for identity does not invoke delegation'.
-
- "Normal perform:with: delegation with any selector other than #=="
- aProtoObj perform: #name: with: #FOO.
- self assert: #FOO equals: aProtoObj name
- description: 'name of the MCPackage should have been set to #FOO'.
-
- "Selector #== must refer to aProtoObj, not to the MCPackage to which it delegates"
- self assert: [aProtoObj perform: #== with: aProtoObj]
- description: 'If aProtoObj delegates to the MCPackage the identity test will fail'.
- !
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!
David T. Lewis uploaded a new version of Tests to project The Trunk:
http://source.squeak.org/trunk/Tests-dtl.395.mcz
==================== Summary ====================
Name: Tests-dtl.395
Author: dtl
Time: 13 May 2018, 7:12:22.626004 pm
UUID: da0200e6-5c03-4bf3-9f9f-60f6f92beeee
Ancestors: Tests-mt.394
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.
Add MCPackageInEnvironmentTest to document the issue.
=============== Diff against Tests-mt.394 ===============
Item was added:
+ MCTestCase subclass: #MCPackageInEnvironmentTest
+ instanceVariableNames: ''
+ classVariableNames: ''
+ poolDictionaries: ''
+ category: 'Tests-Monticello'!
Item was added:
+ ----- Method: MCPackageInEnvironmentTest>>testPerformIdentityEquals (in category 'testing') -----
+ testPerformIdentityEquals
+ "Verify that #perform:with: can be used to send #== for identity test. Required
+ for identity test in PluggableDictionary. Delegation to the MCPackage does not
+ work in that case because the package is a different object."
+
+ | aProtoObj |
+ aProtoObj :=MCPackageInEnvironment
+ decorating: (MCPackage new name: 'No Name Yet')
+ in: Environment default.
+ self assert: [aProtoObj == aProtoObj]
+ description: 'Direct test for identity does not invoke delegation'.
+
+ "Normal perform:with: delegation with any selector other than #=="
+ aProtoObj perform: #name: with: #FOO.
+ self assert: #FOO equals: aProtoObj name
+ description: 'name of the MCPackage should have been set to #FOO'.
+
+ "Selector #== must refer to aProtoObj, not to the MCPackage to which it delegates"
+ self assert: [aProtoObj perform: #== with: aProtoObj]
+ description: 'If aProtoObj delegates to the MCPackage the identity test will fail'.
+ !