Inline below...
Cheers,
Alistair
(on phone)
About bug1) I���ve found that Calypso query scopes use sometimes #methods and sometimes #localMethods
ClyLocalClassScope >> methodsDo: aBlock
�� �� �� �� self classesDo: [ :eachClass |
�� �� �� �� �� �� �� �� self metaLevelsOf: eachClass do: [ :concreteMetaLevelClass |
�� �� �� �� �� �� �� �� �� �� �� �� concreteMetaLevelClass methods do: aBlock ] ]
ClyClassHierarchyScope >> methodsDo: aBlock
�� �� �� �� self classesDo: [ :eachClass |
�� �� �� �� �� �� �� �� self metaLevelsOf: eachClass do: [ :concreteMetaLevelClass |
�� �� �� �� �� �� �� �� �� �� �� �� concreteMetaLevelClass methods do: aBlock ] ]
ClyPackageScope >> methodsDo: aBlock
�� �� �� �� self classesDo: [:class |
�� �� �� �� �� �� �� �� class localMethods do: aBlock.
�� �� �� �� �� �� �� �� class classSide localMethods do: aBlock].
�� �� �� �� self packagesDo: [ :package |
�� �� �� �� �� �� �� �� package extensionMethods do: aBlock ]
ClySystemEnvironmentScope >> methodsDo: aBlock
�� �� �� �� self classesDo: [:class |
�� �� �� �� �� �� �� �� class instanceSide localMethods do: aBlock.
�� �� �� �� �� �� �� �� class classSide localMethods do: aBlock]
We should get an homogeneous version of this.
Pablo is checking the UFFI compilation now :)
Right.�� I wrote that it shouldn't matter whether methodDict or local methods is used, but I agree that there should be a single accessor that is used everywhere.
Thanks!
Alistair
> El 18 sept 2019, a las 14:20, Alistair Grant <akgrant0710@gmail.com> escribi��:
>
> P.S.�� Two implications of this:
>
> 1. The code you're looking at may not be the code that is executed.
> If in doubt, use the standard System Browser (not senders,
> implementers, etc.).
> 2. Iceberg may not be loading extension methods that override an
> existing method correctly, so the old version is left as the
> executable code.�� There may be happening in other situations as well,
> I haven't checked.
>
> Thanks,
> Alistair
>
> On Wed, 18 Sep 2019 at 11:04, Alistair Grant <akgrant0710@gmail.com> wrote:
>>
>> Hi Everyone,
>>
>> TraitedMetaclass stores methods in two different instance variables:
>>
>> - methodDict (inherited from Behavior)
>> - localMethods
>>
>> And the same method can be different in each dictionary.
>>
>> Different browsers show different versions, i.e.:
>>
>> - The System Browser uses the method in methodDict.
>> - Calypso's "Senders of" browser uses localMethods.
>> - The Iceberg versions browser uses localMethods.
>>
>> It appears that the method in methodDict is the one that is actually
>> used when a message is sent, but it would be nice to get confirmation.
>>
>> To reproduce this in a clean Pharo 8 image:
>>
>> - Open the System Browser on LGitBuf class>>signature_free: (the
>> methodDict version).
>> - Open the system browser on TLGitCalloutTrait>>call:options: and then
>> press "Senders".�� The resulting window will include LGitBuf
>> class>>signature_free:, but the localMethods version.
>>
>> In this example, #signature_free: isn't defined by the trait, and
>> isn't overwritten, so I would expect that the method in both
>> dictionaries should be the same or it should only be in one
>> dictionary.
>>
>> Can someone say what the intended behaviour is?
>>
>> Thanks,
>> Alistair
>