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