/
CDC-1.2b/
CDC-1.2b/src/
parent $frob_class
object $ctext_class

var $root dbref 'ctext_class
var $root child_index 0
var $root fertile 0
var $root manager $ctext_class
var $root owned [$ctext_class]
var $root owners [$]
var $root writable []
var $root readable ['parameters, 'methods, 'code]
var $root inited 1

method eval
    arg [vars];
    
    vars = [@vars, #[]][1];
    if (!('time in dict_keys(vars)))
        vars = dict_add(vars, 'time, 'pre);
    if (!('evaluator in dict_keys(vars)))
        vars = dict_add(vars, 'evaluator, $base_evaluator);
    (vars['evaluator]).eval_cml(vars, ._ctext());
.

method _ctext
    arg this;
    
    return this;
.

method new
    arg data, [evaluator];
    
    evaluator = [@evaluator, $compile_evaluator][1];
    if (type(data) == 'string)
        data = (evaluator.compile_cml(data))['result];
    return <this(), data>;
.

method eval_ctext
    arg this, [vars];
    
    vars = [@vars, #[]][1];
    if (!('time in dict_keys(vars)))
        vars = dict_add(vars, 'time, 'pre);
    if (!('evaluator in dict_keys(vars)))
        vars = dict_add(vars, 'evaluator, $base_evaluator);
    if (!('this in dict_keys(vars)))
        vars = dict_add(vars, 'this, sender());
    if (!('sender in dict_keys(vars)))
        vars = dict_add(vars, 'sender, sender());
    return (vars['evaluator]).eval_ctext(vars, this);
.

method finish
    arg this;
    var term, output, line;
    
    output = [];
    line = "";
    for term in (this) {
        if (type(term) in ['symbol, 'integer, 'string]) {
            line = line + tostr(term);
        } else if (type(term) == 'dbref) {
            line = line + (term.dbref());
        } else if (type(term) == 'list) {
            if ((term[1]) == 'b_stmt) {
                output = [@output, line];
                line = "";
            } else {
                output = [@output, line, term.to_string()];
                line = "";
            }
        } else {
            line = line + ($data.unparse(term));
        }
    }
    output = [@output, line];
    return output;
.

method uncompile
    arg this;
    
    return $uncompile_evaluator.eval_ctext(this);
.

method ctext
    arg this;
    
    return this;
.