Name of the calling function (ISIS/Slang)

From Remeis-Wiki
Jump to navigation Jump to search

In SLang a so-called frame specifies the execution of a closed piece of code, e.g., a function. All frames are pushed onto a frame stack and removed once the execution of a particular frame finishes. By accessing this frame stack it is possible to trace back, e.g., a function call.

There are a few functions in Slang available, which allows to receive information about frames (and even variables inside a particular frame!):

  • _get_frame_depth
  • _get_frame_info
  • _get_frame_variable
  • _set_frame_variable
  • _use_frame_namespace

We can use this to get the name of the parent function, which executes a child function:

define child() {
  variable call = _get_frame_info(_get_frame_depth()-1);
  if (call.function == NULL) { message("I was called from the command line"); }
  else { vmessage("I was called by '%s'", call.function); }

define parent() {

This will result in

isis> child();
I was called from the command line
isis> parent();
I was called by 'parent'