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); };