[Turn on line numbering]arg @destroyed; var a, v, d, definer, method, descendants, str, tb; (> .perms(caller(), $root, $sys) <); destroyed = destroyed ? 1 : 0; descendants = .descendants() + [this()]; // call [ancestors...].uninit_ancestor() on the object being destroyed for a in (ancestors()) { method = tosym("uninit_" + a.objname()); if ((definer = (| find_method(method) |))) { if (definer != a) { // scream madly and run around--everybody should know this str = "UNINIT ERROR: uninit method for " + a; str += " in wrong place (" + definer + ")"; (| definer.manager().tell(str) |); (| a.manager().tell(str) |); (| sender().tell(str) |); continue; } catch any { .(method)(); } with { // try and let somebody know they made a boo-boo somewhere tb = traceback().fmt_tb(); str = "UNINIT ERROR " + this() + "<" + definer + ">:"; if (definer) { (| definer.manager().tell(str) |); (| definer.manager().tell(tb) |); } (| sender().tell(str) |); (| sender().tell(tb) |); (| sender().tell("Continuing uninit..") |); (| $sys.log_traceback(tb, "** " + str) |); } } refresh(); } // if we have descendants, clean anything from the object being dested method = tosym("uninit_" + .objname()); if ((definer = (| find_method(method) |))) { if (definer != this()) { // scream madly and run around--everybody should know this str = "UNINIT ERROR: uninit method for " + a; str += " in wrong place (" + definer + ")"; (| definer.manager().tell(str) |); (| .manager().tell(str) |); (| sender().tell(str) |); } else { for d in (descendants) { catch any { d.(method)(); } with { // try and let somebody know they made a boo-boo somewhere str = "UNINIT ERROR " + d + "<" + this() + ">:"; tb = traceback().fmt_tb(); (| .manager().tell(str) |); (| .manager().tell(tb) |); if (.manager() != sender()) { (| sender().tell(str) |); (| sender().tell(tb) |); } (| sender().tell("Continuing uninit..") |); (| $sys.log_traceback(tb, "** " + str) |); } refresh(); } } } // clear vars if (!destroyed && descendants) $sys.clear_definer_vars(this(), descendants);
// Created as a part of ColdCore, see: @help Credit