SYNOPSIS
        object previous_object()
        object previous_object(int i)

DESCRIPTION
        Returns an object pointer to the object that did a call (call_other(),
        funcall(), etc) to the current object, if any. If that object is
        destructed, the function returns 0.

        If the optional arg is given, the call_other()s are followed
        back i times (i.e. previous_object(1) returns the caller of
        the caller): 0 <= i < caller_stack_depth(). If <i> is less than 0, the
        first previous object is returned.

        There is an important special case: in functions called by
        the gamedriver in reaction to some external event (e.g. commands
        added by add_action), previous_object() will return this_object(),
        but previous_object(0) will return 0.

EXAMPLES
        int security() {
           object prev;
           if (!(prev=previous_object()));
           else if (getuid(prev)  != getuid(this_object()));
           else if (geteuid(prev) != geteuid(this_object()));
           else return 1;
           return 0;
        }
        void highly_sensible_func() {
            if (!security())
                return;
            ...
        }

        This example shows how we can check if the last call to a
        function of the current object is secure or if we should abort
        execution.

BUGS
        Values of i < 0 are treated as if i == 0 was passed - this is
        historic.

SEE ALSO
        call_other(E), this_object(E), this_player(E),
        caller_stack(E), caller_stack_depth(E), extern_call(E)
