On Mon, Jan 10, 2011 at 11:42 AM, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
Will it work ?

because Compiler class>>new
� � � �^ super new parser: self parserClass new

sets the parser ivar with Compiler parserClass new.
Maybe you'll need to remove this definition of new too.

I think it works. �Behavior>>parser class gets compilerClass parserClass:

Behavior>>parserClass
"Answer a parser class to use for parsing method headers."

^self compilerClass parserClass�

So one is supposed to implement a Compiler subclass that defines a class-side parserClass method. �e.g.

MySpecialClass>>compilerClass
�� �^MySpecialCompiler

MySpecialCompiler class>>parserClass
�� �^MySpecialParser

So then�

Compiler>>parserClass

^parser ifNil: [(class ifNil: [self class]) parserClass] ifNotNil: [parser class]

will also find MySpecialParser.

Yes, its heavyweight because the Compiler subclass isn't providing anything other than the reference to the parser. But that's the way the system is written so far.

what do you think?

best
Eliot


Nicolas

2011/1/10 Eliot Miranda <eliot.miranda@gmail.com>:
>
>
> On Mon, Jan 10, 2011 at 9:46 AM, <pharo@googlecode.com> wrote:
>>
>> Status: Accepted
>> Owner: siguctua
>>
>> New issue 3525 by siguctua: Compiler>>parserClass is broken and does not
>> querying the class for providing the parser class
>> http://code.google.com/p/pharo/issues/detail?id=3525
>>
>> In the following:
>>
>> Compiler>>parserClass
>>
>> � � � �^parser ifNil: [self class parserClass] ifNotNil: [parser class]
>
> Who writes this stuff ?? ;)
> <blush>
> I suggest the attached:
> parserClass
> ^parser ifNil: [(class ifNil: [self class]) parserClass] ifNotNil: [parser
> class]
>
>>
>> 'self class' should actually be 'class parserClass'
>>
>> So, any class could override the default parser by own. In that way a
>> default parser class is answered by Behavior, not by Compiler.
>> A Compiler class>>parserClass is useless.
>>
>>
>> But even more than that, due to initializing 'parser' ivar in
>> Compiler>>new,
>> it never gets to that code, and evaluating 'parser class'
>> So, a class can't specify a custom parser class to compiler.
>>
>>
>>
>>
>
>