blob: 2afda56ae4c953a01c0378a0d3e2c26a28283c35 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001GESCHUETZT
2SYNOPSIS
3 void set_this_object(object objekt-an-stelle-von-originalobjekt);
4
5BESCHREIBUNG
6 Dies ist eine geschuetzte Funktion, die nur vom Master-Objekt und im
7 Simul-Efun-Objekt genutzt werden darf. Bei sonstiger Benutzung
8 erzeugt diese Funktion einen Fehler.
9
10 Die Funktion aendert das Resultat von this_object() in der laufenden
11 Funktion, ebenso das Resultat von previous_object() in Funktionen in
12 anderen Objekten, die einen call_other() Aufruf machen.
13
14 Der Effekt von set_this_object() bleibt bestehen, bis ein externer
15 Funktionsaufruf abgeschlossen ist oder bis zu einem erneuten
16 set_this_object(). Waehrend der Ausfuehrung von Code im Master-Objekt
17 oder im Simul-Efun-Objekt ist set_this_object() garantiert, auch wenn
18 this_object() durch set_this_object() veraendert wird. Die gilt
19 nicht fuer Funktionen, die aus anderen Programmen inheritet werden.
20
21 Diese Funktion darf nur mit hoechster Sorgfalt verwendet werden, um
22 Inkonsistenzen zu vermeiden. Nach einem Aufruf von set_this_object()
23 koennen sich gewisse LPC-Konstrukte merkwuerdig verhalten oder gar
24 das System zum Absturz bringen. Insbesondere die Verwendung von
25 globalen Variablen oder der Aufruf von lokalen Funktionen (ausser
26 durch call_other()) ist unzulaessig und wird aktiv verhindert.
27
28 Erlaubt sind call_other(), map(), der Zugriff auf lokale Variablen
29 (die auch Pointer auf globale Arrays enthalten duerfen), einfache
30 Arithmetik und der Zuweisungs-Operator.
31
32BUGS
33 Es ist momentan nicht moeglich, das originale gueltige Objekt wieder
34 herzustellen. Anstelle von:
35
36 object ich = this_object();
37 set_this_object(dings);
38 <irgendwelcher Code>
39 set_this_object(ich);
40 <mehr Code>
41
42 muss das ueber einen Umweg geloest werden:
43
44 private void tuwas(object dings)
45 {
46 set_this_object(dings);
47 <irgendwelcher code>
48 }
49
50 funcall(#'tuwas, dings);
51 <mehr Code>
52
53 Manche Leute bezeichnen das als Feature.
54
55AENDERUNGEN
56 LDMud 3.2.10 verhindert aktiv die Referenz auf globale Variablen und
57 Funktionsaufrufe nach Adresse, waehren set_this_object() gilt.
58
59SIEHE AUCH
60 this_object(E), set_this_player(E)