SYNOPSIS
        object previous_object()
        object previous_object(int i)

BESCHREIBUNG
        Liefert einen Pointer auf das letzte Objekt, das einen Aufruf (mittels
        call_other(), funcall() etc.) auf das aktuelle Objekt this_object()
        gemacht hat. Wenn dieses aufrufende Objekt inzwischen zerstoert wurde,
        liefert previous_object() 0.

        Wird das Argument <i> angegeben, so verfolgt previous_object() den
        Aufruf <i> Stufen zurueck. Zum Beispiel liefert previous_object(1) das
        aufrufende Objekt des aufrufenden Objekts. Fuer <i> muss gelten:
        0 <= i < call_stack_depth(). Ein Wert <i> < 0 liefert das erste
        aufrufende Object zurueck.

        Es gibt einen wichtigen Spezialfall: in Funktionen, die vom Gamedriver
        auf Grund eines externen Ereignises aufgerufen wurden (zum Beispiel
        Kommandos, die mit add_action() definiert wurden), liefert
        previous_object() den Wert von this_object(), previous_object(0)
        hingegen 0.

BEISPIELE
        int sicherheitscheck() {
            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 sensible_funktion() {
            if (!sicherheitscheck())
                return;
            ...
        }

        Diese Funktion zeigt, wie man ueberpruefen kann, ob der letzte Aufruf
        einer Funktion im aktuellen Objekt sicher war, oder ob die
        Verarbeitung abgebrochen werden sollte.

FEHLER
        Werte von <i> < 0 werden wie <i> == 0 behandelt - dies ist historisch.

SIEHE AUCH
        call_other(E), this_object(E), this_player(E), caller_stack(E),
        caller_stack_depth(E), extern_call(E)
