/
ColdCore-3.0a9.02/
ColdCore-3.0a9.02/src/
new object $eval_parser: $user_parsers;

var $root created_on = 847137598;
var $root flags = ['variables, 'methods, 'code, 'core];
var $root inited = 1;
var $root managed = [$eval_parser];
var $root manager = $eval_parser;
var $user_parsers priority = 500;

public method .evaluate() {
    arg user, str;
    var ep, vars, v, reg, r;
    
    ep = user.eval_prefix();
    vars = (ep.keys()).join(", ");
    v = (ep.values()).join();
    if (match_begin(str, "var") && (reg = regexp(str, "var ([^;]+)"))) {
        str = strsed(str, "var ([^;]+);", "");
        str = ((((("var " + vars) + ", ") + (reg.join(","))) + ";") + v) + str;
    } else if ("return" in str) {
        str = ((("var " + vars) + ";") + v) + str;
    } else {
        str = strsed(str, " *;* *$", "");
        str = ((((("var " + vars) + ";") + v) + "return (> ") + str) + " <);";
    }
    r = (> user.evaluate(str, user, user) <);
    r = r[2];
    if ((r[1]) == 'errors)
        throw(~evalerr, "Eval error: " + (r[2]));
    return r[2];
};

public method .parse() {
    arg u, str, next_parser, @other_parsers;
    var out, l, eval;
    
    if (("`" in str) && (!match_begin(str, ";"))) {
        str = strsub(str, "\`", "<#QUOTED-TICK#>");
        out = str.explode_delimited("`", "`");
        eval = out[2];
        str = "";
        for l in (out[1]) {
            if (type(l) == 'integer)
                str += (> .evaluate(u, eval[l]) <);
            else
                str += l;
        }
        str = strsub(str, "<#QUOTED-TICK#>", "`");
    }
    return next_parser.parse(u, str, @other_parsers);
};