down: function(ruleset){
if(ruleset) this.rulesets.push(ruleset);
this.scope = new symtab.Scope(this.scope);
},
up: function(ruleset){
if(ruleset) this.rulesets.pop();
this.scope = this.scope.getOuterScope();
},
concatSelector: function(selectorList){
var ss = this.rulesets;
if(!ss.length) return selectorList;
var parentList = ss[ss.length - 1].selector,
slist = selectorList.list,
plist = parentList.list,
slen = slist.length,
plen = plist.length,
sstring, pstring, rstring,
s, p, res;
var res = new tree.SelectorList();
for(p = 0; p < plen; p ++){
pstring = plist[p].string;
for(s = 0; s < slen; s ++) {
sstring = slist[s].string;
if(~sstring.indexOf('&')){
rstring = sstring.replace(/&/g, pstring)
}else{
rstring = pstring + ' ' + sstring;
}
res.list.push(new tree.ComplexSelector(rstring));
}
}
return res
},