/
CDC-1.2b/
CDC-1.2b/src/
parent $root_evaluator
object $prep_evaluator

var $root dbref 'prep_evaluator
var $root child_index 3
var $root fertile 1
var $root manager $prep_evaluator
var $root owned [$prep_evaluator]
var $root owners [$]
var $root writable []
var $root readable ['parameters, 'methods, 'code]
var $root inited 1
var $prep_evaluator append_str "_stmt"

method set_stmt
    arg vars, args;
    var name;
    
    if ((vars['time]) != 'pre)
        return dict_add(vars, 'result, args);
    vars = ._eval_cml(vars, args[1]);
    name = vars['result];
    if ((name[1]) != 'string)
        return dict_add(vars, 'result, ['string, "variable name must be a string"]);
    vars = dict_add(vars, name[2], args[2]);
    return dict_add(vars, 'result, 'succes);
.

method name_stmt
    arg vars, args;
    var names, n, output, f, name, delayed;
    
    output = [];
    delayed = 0;
    
    //.debug(names);
    //.debug("name2",names);
    if ((vars['time]) == 'post) {
        f = vars['sender];
        if ((args[1]) != 'list)
            args = [args];
        for n in (args) {
            vars = $base_evaluator._eval_ctext(vars, n);
            n = n[2];
            if (f == n) {
                output = [@output, ['string_type, "you"]];
            } else {
                catch ~methodnf {
                    output = [@output, ['string, n.name()]];
                } with handler {
                    output = [@output, ['string, tostr(n)]];
                }
            }
        }
    } else {
        vars = $base_evaluator._eval_ctext(vars, args[1]);
        names = vars['result];
        if ((names[1]) != 'list)
            names = [names];
        for name in (names) {
            //  .debug(name);
            n = name[2];
            if ((n.has_ancestor($user)) && (f != "generic")) {
                output = [@output, ['name_stmt, name]];
                delayed = 1;
            } else {
                catch ~methodnf {
                    output = [@output, ['string, n.name()]];
                } with handler {
                    output = [@output, ['string, tostr(n)]];
                }
            }
        }
        if (delayed)
            vars = dict_add(vars, 'delayed, 1);
    }
    return dict_add(vars, 'result, @output);
.

method test_if
    var vars, line;
    
    vars = #[['times, ['vddl]]];
    line = [[$base_evaluator, 'if_stmt, [[$base_evaluator, 'eq_stmt, ["1", "1"]], "baz"]]];
    return $base_evaluator.eval_cml(vars, line);
.

method init_base_evaluator
    append_str = "_stmt";
.

method if_stmt
    arg vars, args;
    var output, index, length, statements;
    
    if (!('pre in (vars['times])))
        return dict_add(vars, 'result, args);
    index = 1;
    output = [];
    while (listlen(args) >= (index + 1)) {
        vars = $base_evaluator._truth(vars, [args[index]]);
        if ((vars['result])[1]) {
            statements = args[index + 1];
            if (type(statements) in ['string, 'symbol]) {
                output = [statements];
            } else if (type(statements[1]) == 'string) {
                index = 1;
                while (index <= listlen(statements)) {
                    vars = $base_evaluator._eval_cml(vars, [statements[index]]);
                    output = output + (vars['result]);
                    index = index + 1;
                }
            }
            return dict_add(vars, 'result, output);
        } else {
            index = index + 2;
        }
    }
    if (listlen(args) == index)
        return $base_evaluator._eval_cml(vars, args[index]);
    return dict_add(vars, 'result, output);
.

method get_stmt
    arg vars, args;
    var name;
    
    if ((vars['time]) != 'pre)
        return dict_add(vars, 'result, args);
    vars = $base_evaluator._eval_ctext(vars, args[1]);
    name = vars['result];
    if ((name[1]) != 'string_type)
        return dict_add(vars, 'result, ['string, "Variable names must be strings."]);
    if (!((name[2]) in dict_keys(vars)))
        return dict_add(vars, 'result, ['string, "NO SUCH VARIABLE " + (name[2])]);
    return dict_add(vars, 'result, vars[name[2]]);
.

method eq_stmt
    arg vars, args;
    var left, right;
    
    vars = $base_evaluator._eval_cml(vars, [args[1]]);
    left = (vars['result])[1];
    vars = $base_evaluator._eval_cml(vars, [args[2]]);
    right = (vars['result])[1];
    if (left == right)
        return dict_add(vars, 'result, ['true]);
    else
        return dict_add(vars, 'result, ['false]);
.