Why ? Please explain ...
> On 1 Mar 2019, at 18:02, David T. Lewis <le...@mail.msen.com> wrote:
>
> On Fri, Mar 01, 2019 at 05:18:27PM +0100, Sven Van Caekenberghe wrote:
>>
>>
>>> On 1 Mar 2019, at 17:08, Petr Fischer via Pharo-users
>>> <pharo-users@lists.pharo.org> wrote:
>>>
>>>
>>> From: Petr Fischer <petr.fisc...@me.com>
>>> Subject: Symbol equality method #= - weird condition in the Pharo sourcecode
>>> Date: 1 March 2019 at 17:08:03 GMT+1
>>> To: pharo-users@lists.pharo.org
>>>
>>>
>>> Hello, this is Symbol equality method in Pharo:
>>>
>>> 1: = aSymbol
>>> 2: "Compare the receiver and aSymbol."
>>> 3: self == aSymbol ifTrue: [^ true].
>>> 4: self class == aSymbol class ifTrue: [^ false].
>>> 5: "Use String comparison otherwise"
>>> 6: ^ super = aSymbol
>>>
>>> Look at line 4 - what does it mean? That's wrong, isn't it?
>>>
>>> Typically, every symbol comparisons end up in line 3, but if you do some
>>> work with forward proxies for example, condition on line 3 is "false" and
>>> then weird things on line 4 happens.
>>>
>>> If line 4 and further are correct, can someone explain a little?
>>>
>>> Thanks! pf
>>
>> Yes, that looks weird. Line 4 should probably be removed, unless I am
>> missing something.
>
> It is wrong in a Spur image, because we now have subclasses of Symbol.
> But removing line 4 is not the right solution. See Nicolas' implementation
> in Squeak:
>
> Symbol>>= aSymbol
> "Compare the receiver and aSymbol."
> self == aSymbol ifTrue: [^ true].
> aSymbol isSymbol ifTrue: [^ false].
> "Use String comparison otherwise"
> ^ super = aSymbol
>
> Dave
>
>>
>> Symbols are by definition always #== so in that sense, #= should not even be
>> implemented (as #= on Object is defined as #==), but since its direct super
>> class String already overwrote #=, it has to follow.
>>
>> The super call in line 6 is what allows Symbols and String to be compared.
>>
>> I would say line 4 is a kind of sanity check, but probably not needed.