AddCmd(): keine exportierbare Closure auf protected lfuns
AddCmd() erzeugt eine Closure fuer String-Methoden, wenn moeglich.
Bislang dann, wenn AddCmd entweder intern gerufen wurde oder
function_exists() die lfun findet. Dabei wurden aber auch protected
lfuns gefunden, weswegen man mit AddCmd beliebige dieser protected
lfuns rufen konnte.
Daher werden:
* die erzeugten Closures nur nocht intern gecached
* bei externem Auruf von AddCmd protected/static Methoden abgelehnt.
QueryProp/SetProp-Methoden sind entsprechend ueberarbeitet.
Change-Id: Icc34f9e648a392177cf487943b7df493194fc0d6
diff --git a/doc/props/P_COMMANDS b/doc/props/P_COMMANDS
index 527d1a1..d0ff99b 100644
--- a/doc/props/P_COMMANDS
+++ b/doc/props/P_COMMANDS
@@ -18,30 +18,41 @@
({flag1,...});
({regel1,...});
({id1, ...}),
+ ({closure auf fun1, ...}),
... ])
Die Eintraege entsprechen den Parametern des AddCmd()-Aufrufs, sind
aber in anderer Form. Als Beispiel:
AddCmd(verb,fun1,1);
- AddCmd(verb+syn1a|syn1b&syn2a|syn2b|syn2c,fun2,
- error1_notify|error2_notify^error2_write);
+ AddCmd(verb+syn1a|syn1b&syn2a|syn2b|syn2c, fun2,
+ error1_notify|error2_notify^error2_write);
-->
- ([verb:({fun1,fun2}); // funs
- ({1,({error1_notify, error2_write^error2_say, 1})}); // flags
- ({0,({({syn1a,syn1b}),({syn2a,syn2b,syn2c})})}); // rules
- 0]) // IDs
+ ([verb:
+ ({fun1,fun2}); // funs
+ ({1,({error1_notify, error2_write^error2_say, 1})}); // flags
+ ({0,({({syn1a,syn1b}),({syn2a,syn2b,syn2c})})}); // rules
+ 0; // IDs
+ ({closure auf fun1, closure auf fun2}) ]) // Cache
- Aufgeschluesselt sehen die einzelnen Arrays folgendermassen aus:
-
+ Funs: ({<fun1> ,...
+ 'fun' kann sein: Closure
+ String: Methodenname - wird etwas geprueft
+ Objekt: wenn keine Methode, this_object() fuer
+ intern, previous_object() fuer extern
+ 0 (erloschenes externes Objekt)
Rules: ({<Regelsatz fuer fun1>, ({<1. Synonymgruppe>,
- <2. Synonymgruppe, ...}), ...})
+ <2. Synonymgruppe, ...}), ...})
Flags: ({<Flag fuer fun1>, ({<Fehlermeldung 1. Synonymgruppe>, ... ,
- [, Index fuer write anstatt notify_fail]}),
- ... })
+ [, Index fuer write anstatt notify_fail]}),
+ ... })
IDs: 0 oder ({<ID fuer fun1>}) oder ({0, <ID fuer fun2>}) ...
+ Cache: ({<closure fuer fun1>, ...
+
+BEMERKUNGEN:
+ Cache-Closures sind bei Export immer genullt
SIEHE AUCH:
/std/thing/commands.c, AddCmd(), RemoveCmd()
-08.Dez.2003 Gloinson
+16. Dez 2016 Gloinson
\ No newline at end of file