AddCmd: _query/_set-Methoden korrigieren
Nachbearbeitung zum Clossure-Patchset.
* _query_commands() prueft nicht mehr, weil das beim Debuggen
stoeren duerfte und unkritisch ist
* _set_commands() setzt jetzt auch tatsaechlich die neuen
Kommandos in die added_cmds
Change-Id: Ia823ecc395729354828dd43b657b701f08ce0469
diff --git a/std/thing/commands.c b/std/thing/commands.c
index a1aa079..8683f72 100644
--- a/std/thing/commands.c
+++ b/std/thing/commands.c
@@ -633,7 +633,8 @@
private void _check_importentry(string ind, mixed *fun, mixed *flag,
mixed *rule, int|mixed id, mixed *cachedcl) {
- // Check der Stringmethoden
+ // Check der Stringmethoden: Fehler werden abgefangen, um generelles
+ // Kopieren zu ermoeglichen. Es koennen aber Kommandomethoden verloren gehen.
cachedcl = map(fun, function int|closure(string clfun) {
closure ret;
catch(ret=_check_stringmethod(
@@ -648,22 +649,17 @@
private void _cleanup_exportcl(string ind, mixed *fun, mixed *flag,
mixed *rule, int|mixed id,
- mixed *cachedcl, mixed *fl) {
+ mixed *cachedcl) {
cachedcl = allocate(sizeof(fun));
- foreach(string func: filter(fun, #'stringp))
- catch(_check_stringmethod(func, 1, "Warnung QueryProp(P_COMMANDS): ");
- publish);
}
static mapping _query_commands() {
mapping ret;
if(mappingp(added_cmds)) {
ret = deep_copy(added_cmds);
- // Hier kann man nicht mehr herausfinden, ob es ein extern_call() ist:
- // Closures im Cache werden immer geloescht.
- walk_mapping(ret, #'_cleanup_exportcl,
- functionlist(this_object(), RETURN_FUNCTION_NAME|
- RETURN_FUNCTION_FLAGS));
+ // Closures im Cache werden immer geloescht, da sonst versehentlich
+ // doch exportiert werden koennte
+ walk_mapping(ret, #'_cleanup_exportcl);
}
return ret;
}
@@ -675,7 +671,7 @@
raise_error("SetProp(P_COMMANDS): corrupt commands-mapping.\n");
mapping tmp = deep_copy(commands);
walk_mapping(tmp, #'_check_importentry);
- commands = tmp;
+ added_commands = tmp;
}
return _query_commands();
}