Apparently this method was like that in Pharo 60 so this is not my edit.
fullClassName
"Using #class selector for classes for backwards compatibility"
^ self classIsMeta
ifFalse: [self className]
ifTrue: [
(self actualClass isNil or: [ self actualClass isTrait ])
ifFalse: [self className, ' class']
ifTrue: [self className, ' classSide']]
Now it does not mean that this is not a bug I introduced.
On Sun, Feb 25, 2018 at 9:42 PM, Stephane Ducasse
<[email protected]> wrote:
> the problem is here of course but I need my mind back (In the train to
> home). ...
>
>
> MCMethodDefinition>>fullClassName
> "Using #class selector for classes for backwards compatibility"
>
> ^ self classIsMeta
> ifFalse: [self className]
> ifTrue: [
> (self actualClass isNil or: [ self actualClass isTrait ])
> ifFalse: [self className, ' class']
> ifTrue: [self className, ' classSide']]
>
>
>
>
>
> On Sun, Feb 25, 2018 at 9:41 PM, Stephane Ducasse
> <[email protected]> wrote:
>> Hi Alistair
>>
>> This is my mistake! I introduced this bug when I transformed
>> theMetaClass to classSide
>> Now I was paying super attention and I did not touch theMetaClass even
>> when class would have been far enough.
>> So do you have a scenario? So that I can try to have a look.
>> Unfortunately I was away from home and lab since a week and I may have
>> problem to allocate concentrated time.
>> But I will try.
>> Tx for reporting this!
>>
>> Stef
>>
>>
>> On Sun, Feb 25, 2018 at 3:48 PM, Alistair Grant <[email protected]>
>> wrote:
>>> Hi Everyone,
>>>
>>> I'm working on integrating the file attribute primitives in to the main
>>> code during bootstrap.
>>>
>>> Class methods for FileAttributesPluginPrims are written out as:
>>>
>>>
>>>
>>> !FileAttributesPluginPrims classSide methodsFor: 'initialize' stamp: 'nil'!
>>> reset
>>> "Reload the masks"
>>>
>>> Default := nil.! !
>>>
>>>
>>> As you can see, the class name is written with "classSide" instead of
>>> "class", resulting in the method quietly being ignored during file in.
>>>
>>> This comes about in:
>>>
>>>
>>> MCStWriter>>writeMethodPreamble: definition
>>> self chunkContents: [:str |
>>> stream bang.
>>> str nextPutAll: definition fullClassName;
>>> nextPutAll: ' methodsFor: ';
>>> nextPutAll: definition category asString printString;
>>> nextPutAll: ' stamp: ';
>>> nextPutAll: definition timeStamp asString printString
>>> ]
>>>
>>>
>>> which calls:
>>>
>>>
>>> MCMethodDefinition>>fullClassName
>>> "Using #class selector for classes for backwards compatibility"
>>>
>>> ^ self classIsMeta
>>> ifFalse: [self className]
>>> ifTrue: [
>>> (self actualClass isNil or: [ self actualClass isTrait ])
>>> ifFalse: [self className, ' class']
>>> ifTrue: [self className, ' classSide']]
>>>
>>>
>>>
>>> Because FileAttributesPluginPrims doesn't exist in the image (the code
>>> is read in from the git repository and being written out to a .st file),
>>> #actualClass returns nil, resulting in "classSide" being used instead of
>>> "class".
>>>
>>> I've never seen "classSide" used in chunk format. Is there any time
>>> "classSide" is valid, and any suggestions on how this should be fixed?
>>> (My first thought is to just change MCStWriter>>writeMethodPreamble: to
>>> only write "class").
>>>
>>>
>>>
>>> Thanks,
>>> Alistair
>>>