@@ -633,6 +633,13 @@ var AST_Seq = DEFNODE("Seq", "car cdr", {
|
|||||||
p = p.cdr;
|
p = p.cdr;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
len: function() {
|
||||||
|
if (this.cdr instanceof AST_Seq) {
|
||||||
|
return this.cdr.len() + 1;
|
||||||
|
} else {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
},
|
||||||
_walk: function(visitor) {
|
_walk: function(visitor) {
|
||||||
return visitor._visit(this, function(){
|
return visitor._visit(this, function(){
|
||||||
this.car._walk(visitor);
|
this.car._walk(visitor);
|
||||||
|
|||||||
@@ -673,8 +673,12 @@ merge(Compressor.prototype, {
|
|||||||
seq = [];
|
seq = [];
|
||||||
};
|
};
|
||||||
statements.forEach(function(stat){
|
statements.forEach(function(stat){
|
||||||
if (stat instanceof AST_SimpleStatement && seq.length < 2000) seq.push(stat.body);
|
if (stat instanceof AST_SimpleStatement && seqLength(seq) < 2000) {
|
||||||
else push_seq(), ret.push(stat);
|
seq.push(stat.body);
|
||||||
|
} else {
|
||||||
|
push_seq();
|
||||||
|
ret.push(stat);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
push_seq();
|
push_seq();
|
||||||
ret = sequencesize_2(ret, compressor);
|
ret = sequencesize_2(ret, compressor);
|
||||||
@@ -682,6 +686,18 @@ merge(Compressor.prototype, {
|
|||||||
return ret;
|
return ret;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function seqLength(a) {
|
||||||
|
for (var len = 0, i = 0; i < a.length; ++i) {
|
||||||
|
var stat = a[i];
|
||||||
|
if (stat instanceof AST_Seq) {
|
||||||
|
len += stat.len();
|
||||||
|
} else {
|
||||||
|
len++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return len;
|
||||||
|
};
|
||||||
|
|
||||||
function sequencesize_2(statements, compressor) {
|
function sequencesize_2(statements, compressor) {
|
||||||
function cons_seq(right) {
|
function cons_seq(right) {
|
||||||
ret.pop();
|
ret.pop();
|
||||||
|
|||||||
Reference in New Issue
Block a user