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]);
.