new object $propagator: $frob;
var $root created_on = 861726346;
var $root flags = ['variables, 'methods, 'code, 'core];
var $root inited = 1;
var $root managed = [$propagator];
var $root manager = $propagator;
public method .effect() {
arg self;
return ((self.length()) > 1) ? (self[2]) : 0;
};
public method .format() {
arg prop;
var i, str, pref, val;
if (!prop)
return "no";
[val, (pref ?= "")] = prop;
str = map i in (val) to ((tostr(i[1]) + "=") + (i[2])).join("; ");
if (pref) {
if (type(pref) == 'string)
str += " /" + pref;
else
str += strfmt(" /.%l(%l)", pref[1], map i in (pref.subrange(2)) to (toliteral(i)).join(","));
}
return str;
};
public method .new_with() {
arg str;
var ctext, i, m, effect, props;
if (str in ["n", "no", "none", "0"])
return 0;
effect = 0;
props = #[];
if ((m = str.match_pattern("*/*"))) {
[str, effect] = m;
if (((effect.length()) >= 2) && ((effect[1]) == ".")) {
if (!(effect = effect.match_pattern("*(*)")))
throw(~parse, "Effect is not of the form .method(arg, ...)");
effect = [tosym((effect[1]).subrange(2)), @map i in ((effect[2]).split(",")) to (fromliteral(i))];
}
}
for i in ((str.explode(";")).mmap('trim)) {
if (!(m = i.match_pattern("*=*")))
throw(~parse, "'=' expected");
if (!((m[2]).is_numeric()))
throw(~parse, "Illegal propagator value");
props = props.add(tosym(m[1]), toint(m[2]));
}
props = effect ? [props, effect] : [props];
return (<this(), props>);
};
public method .senses() {
arg self;
return self[1];
};