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
>>>

Reply via email to