SYNOPSIS
        <object|lwobject>* caller_stack()
        <object|lwobject>* caller_stack(int add_interactive)

DESCRIPTION
        Returns an array of the previous_object()s who caused the
        call_other() to this_object().
        previous_object(i) equals caller_stack()[i].

        If you pass the optional argument <add_interactive> (as true value)
        this_interactive() is appended to the array, or 0 if there is no
        current interactive.

        Note: calls to 'alien lfun closures' (see symbol_function(E))
        generate two entries on the stack if the bound object differs
        from the closure object: the first is for the bound object,
        the second for the closure object.

EXAMPLES
        interactive object A enters a command which causes
        a call to a function in object B, that one calls a
        function in object C and that, in turn, in object D

        If D now calls caller_stack() the result would be: ({C,B}).
        If it calls caller_stack(1) the result is: ({C,B,A}).

HISTORY
        Introduced in LDMud 3.2.6, suggested by Tubmud.

SEE ALSO
        caller_stack_depth(E), previous_object(E), this_interactive(E),
        call_other(E)
