new object $tag: $frob; var $root created_on = 837584128; var $root flags = ['variables, 'methods, 'code, 'core]; var $root inited = 1; var $root managed = [$tag]; var $root manager = $tag; public method .add_ctext_flag() { arg self, key, value; var efalgs, uflags; eflags = (self[2]).addkey(key, value); self = self.replace(2, eflags); return (<this(), self>); }; public method .append_arg() { arg self, new; var args; args = (self[3]) + [new]; return (<this(), (self.replace(3, args))>); }; public method .args() { arg self; return self[3]; }; public method .ctext_flags() { arg self; return self[2]; }; public method .eval_flags() { arg this, vars; var flags, i, l, val, s; flags = this[2]; l = []; s = sender(); for i in (flags) { if (type(i[2]) != 'string) { [val, vars] = s._eval_ctext(i[2], vars); l += [[i[1], val]]; } else { l += [i]; } } return [this[1], l, this[3], this[4]]; }; public method .method() { arg self; return self[4]; }; public method .name() { arg self; return self[1]; }; public method .new_tag() { arg name, flags, args, method; var item, eflags; eflags = []; for item in (flags) { switch (type(item)) { case 'string: eflags = eflags.addkey(item, 1); case 'list: if (type(item[1]) != 'string) throw(~flagerr, "Flag name must be a string."); eflags = eflags.addkey(item[1], item[2]); default: throw(~flagerr, "Flag must be a string or key,value pair."); } } return (<this(), [name, eflags, args, method]>); }; public method .set_args() { arg self, args; return (<this(), (self.replace(3, args))>); };