[Newbies] Trace through calls

Göran Krampe goran at krampe.se
Mon Apr 4 21:02:04 UTC 2011


On 04/04/2011 10:22 PM, Rick H. wrote:
> Hello.  I am trying to get a handle on how things are are called.  I might
> like to make some changes to standard morphs for my own purposes.
>
> I can put the cursor on a morph, and inspect it, or debug it.  Can I put the
> cursor on it and say "I want this morph, and all of its submorphs, to make a
> note on the Transcript each time a method is entered?"
>
>               Regards, Rick

Not typical beginner stuff, but here goes:

Anything is possible - and my first idea on how to do that was to "wrap" 
the morph (and all its submorphs individually) in a so called "wrapper" 
object that delegates all messages to its wrappee - but first prints 
something of course.

Constructing such a wrapper that is properly "invisible" can be a bit 
tricky but basically one can create a class inheriting from ProtoObject 
(instead of Object) which means it will have NO inherited behavior, and 
then implement doesNotUnderstand: to do the delegation. Such a class 
will be "utterly stupid" and thus fairly invisible. Things making it 
complicated are identity - you would need to do the "wrap" using the 
magical become: message. And you would need to make sure the wrappee 
doesn't "leak" itself out as an answer to a message - in unwrapped form. 
As you realize it gets tricky.

Then I remembered that there is something called MethodWrappers that can 
be used to do similar "augmentation", but on a method by method basis 
instead of on the object level. I am pretty sure that is a much more 
bullet proof approach. Haven't used that package myself though.

regards, Göran


More information about the Beginners mailing list