assert promise != null: Debug.show(clasz, " - ", initializer);
assert promise != null: Debug.show(clasz, initializer);
    private Object load(Object object, Variable variable) {        switch (variable) {        case Global(Object value):            return value;        case Module(ScalaTemplate template, Object value):            if (value != null) return value;            value = evaluate(Code.Create(template));            ((Variable.Module)variable).template = null;            ((Variable.Module)variable).value = value;            Symbol clasz = template.getSymbol();            Symbol initializer = clasz.lookup(Names.INITIALIZER);            CodePromise promise = template.getMethod(initializer);            assert promise != null: Debug.show(clasz, " - ", initializer);            evaluate(promise, value, new Object[0]);            return value;        case Member(int index):            return getScalaObject(object).variables[index];        case Argument(int index):            return stack.args[index];        case Local(int index):            return stack.vars[index];        case JavaField(Field field):            return load(object, field);        default:            throw Debug.abort("illegal variable", variable);        }    }