On 25 Jul 2014, at 20:55, Marcus Denker <marcus.den...@inria.fr> wrote:

> 
> On 25 Jul 2014, at 20:49, Thierry Goubier <thierry.goub...@gmail.com> wrote:
> 
>> Le 25/07/2014 20:37, kilon alios a écrit :
>>> I don't understand how to use aClass definition from workspace nor I 
>>> understand your selector message. 
>>> 
>>> (aClass compiledMethodAt: self selector) sourceCode , self would imply that 
>>> i try to operate this from inside another class with self selector being 
>>> the method itself at the time executed ?
>> No, just that you can write:
>> 
>> (Object compiledMethodAt: #printString) sourceCode
>> 
>> That's me not sanitizing my code samples (lifting it from the AltBrowser)
>> 
>>> 
>>> However because I try to parse pharo syntax to python code, the classes 
>>> that I am parsing are unrelated to the parser class itself  so I don't see 
>>> how self selector would be relevant here. 
>>> 
>>> 
>>> I also don't understand 
>>> 
>>>     ast := RBParser parseMethod: aTarget text asString onError: [ :msg :pos 
>>> | ^ self ].
>>>     ast doSemanticAnalysisIn: self sourceClass
>>> 
>>> what is aTarget ? 
>> 
>> Ok, as above, it should be understood as:
>> 
>> ast := RBParser parseMethod: (Object compiledMethodAt: #printString) 
>> onError: [ :msg :ps | ].
>> ast doSemanticAnalysisIn: self sourceClass.
>> 
> 
> There is  a method on CompiledMethod called #ast that called the parser + 
> semantic analysis:
> 
>       ( Object compiledMethodAt: #halt ) ast
> 
> No need to know details about RBParser.
>       

as example how to query the AST see the method #accessesSlot:

accessesSlot: aSlot
        self ast nodesDo: [ :node | 
                node isVariable and: [
                        node isInstance and: [ 
                                (node binding slot ==  aSlot)
                                         ifTrue: [^true]]]]. 
        ^false
        

Reply via email to