Method code for $root.initialize()

[Turn on line numbering]
var ancestors, pos, len, method, a, def, str, tb;

// called by $sys.create() to create a new object.
if (caller() != $sys && sender() != this())
    throw(~perm, "Caller is not $sys and sender is not this.");
if (inited)
    throw(~perm, "Already initialized.");
ancestors = ancestors().reverse();
for a in (ancestors) {
    refresh();
    if (!(method = (| tosym("init_" + tostr(a.objname())) |)))
        continue;
    if ((def = (| find_method(method) |))) {
        if (def != a) {
            (| def.manager().tell("Initialization method for " + a + " in wrong place (" + find_method(method) + ")") |);
        } else {
            catch any {
                .(method)();
            } with {
                // try and let somebody know they made a boo-boo somewhere
                str = "UNINIT ERROR " + this() + "<" + def + ">:";
                tb = traceback().fmt_tb();
                if (def) {
                    (| def.manager().tell(str) |);
                    (| def.manager().tell(tb) |);
                }
                if (.manager() != sender()) {
                    (| sender().tell(str) |);
                    (| sender().tell(tb) |);
                }
                (| sender().tell("Continuing init..") |);
                (| $sys.log_traceback(tb, "** " + str) |);
            }
        }
    }
}
inited = 1;

["// Created as a part of ColdCore, see: @help Credit"]

the Cold Dark