/
ColdCore-3.0a9.02/
ColdCore-3.0a9.02/src/
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))>);
};