I wanted a list of all methods of an object.  After a little puzzling and
review, I found it in object~instancemethods~allindexes.  Along the way,
though, I was looking at collections of methods with ~allitems instead,
and was reminded that the method objects don't actually have names of
their own at all.  A single method, then, could be added to a class or
object with any number of method names.  Similarly, a single routine
could be added to a package with any number of routine names.

That got me wondering:  What if I wanted a method or routine to act
differently depending on its name?  So I dug some more and found
.context~name, which tells me the name of the currently running method or
routine.

But now suppose I'm tracing and don't know where I am.  That gives me the
name, but can I tell whether I'm in a method, a named routine, or an
internal routine?

PARSE SOURCE tells me if I'm in a method, but not whether I'm in an
internal routine in that method.  SIGL will be set at the start of an
internal routine, but might be explicitly set or dropped elsewhere.

Outside of a method, if the package name from PARSE SOURCE (also in
.context~package~name) doesn't match .context~name, I must be in a named
or internal routine but don't know which kind.  If they do match, I might
be in the main program--but it's also possible I'm in a routine that was
added later.

  /* deliberately confusing:
     add a routine with the same name and package name
     as the package we're in now
   */
  .context~package~addroutine(.context~package~name,,
    ,routine~new(.context~package~name,,
      'Trace ?R;Parse Source;Say .context~name'))

  Call (.context~package~name)

Is there any more direct indication of what kind of routine I'm in?

¬R


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Oorexx-users mailing list
Oorexx-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oorexx-users

Reply via email to