cant you also use the ast to find out how exactly Pharo which object and
which method it executes ?


On Thu, Aug 7, 2014 at 11:39 AM, kilon alios <kilon.al...@gmail.com> wrote:

> Marcus has shown me previously ast with nodesDo: for example this code
> show me the full ast for my class method blenderOpen of my class Ephestos.
>
> (Ephestos class compiledMethodAt:  #blenderOpen ) ast nodesDo: [ :node|
>  node inspect]
>
> and it opens one inspector per node
>
> messages that are "method calls" are nodes of RBMessageNode class. I see a
> instance variable "selector" which returns the name of the selector and an
> instance variable "receiver" returns the name of the receiver. Instance
> variable "parent" describes the container of the message . For example in
> my case the only RBMessageNode is contained inside a variable assignment.
>
> So I think its a good start for finding "method calls" messages.
>
>
> On Thu, Aug 7, 2014 at 11:18 AM, Clément Bera <bera.clem...@gmail.com>
> wrote:
>
>>
>>
>>
>> 2014-08-07 5:11 GMT+02:00 aria2end <aria2...@gmail.com>:
>>
>> Hi, I know that I can see senders and implementers of a method but is
>>> there
>>> any way to see all methods that are used in a method ?
>>>
>>
>> This is impossible. The method called for each message send can only been
>> known at runtime, because it depends on the receiver class. The only thing
>> you could see is the list of selectors (name of methods) called from this
>> method. This is possible by sending #messages to the compiledMethod.
>>
>> Example:
>>
>> you have a method named #foo:bar: implemented in MyClass:
>> MyClass>>foo: arg1 bar: arg2
>>     ^ self baz: arg1 + arg2
>>
>> You can open a workspace, and run:
>> (MyClass >>#foo:bar:) messages
>>
>> which answers:
>> a Set(#baz: #+)
>>
>> but you cannot see the methods called, because depending on the class of
>> arg1, the method called for #+ may be any of these methods:
>> AJMem>>#+ Collection>>#+ Color>>#+ DateAndTime>>#+ Duration>>#+ Float>>#+
>> FloatArray>>#+ Fraction>>#+ Integer>>#+ Interval>>#+ KMComposedModifier>>#+
>> KMKeyCombinationSequence>>#+ KMModifier>>#+ KMNoShortcut>>#+
>> LargeInteger>>#+ Number>>#+ Point>>#+ ROAbstractComponent>>#+ ROShape>>#+
>> ROShape class>>#+ ScaledDecimal>>#+ SmallInteger>>#+ String>>#+
>> Timespan>>#+ TraitComposition>>#+ TraitDescription>>#+
>> TraitTransformation>>#+ WordArray>>#+ TComposingDescription>>#+
>>
>> Or perhaps you want to see all the potential methods called. Then you can
>> open a workspace and run this script:
>>
>> | methods mb |
>> methods := ((CompiledMethod>>#foo:bar:) messages collect: [ :selector |
>> selector implementors ]) flattened.
>> mb := MethodBrowser new.
>> mb openWithSpec.
>> mb methods: methods
>>
>>
>>
>>>  or any way to see
>>> all the send messages to other methods limited to scope of a method ?
>>>
>>
>> all the send messages to other methods ?
>>
>> Well for that you'll need type inference to find out which variables are
>> actually methods, and then see what messages are sent to those variables.
>> But why would one want to do that ?
>>
>>>
>>> Thanks,
>>> Aria
>>>
>>>
>>>
>>>
>>>
>>> --
>>> View this message in context:
>>> http://forum.world.st/Seeing-all-the-methods-that-is-used-in-a-method-tp4772100.html
>>> Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.
>>>
>>>
>>
>

Reply via email to