in-place sequences
This commit is contained in:
parent
eca96f1905
commit
bfbac53762
|
|
@ -676,7 +676,7 @@ merge(Compressor.prototype, {
|
|||
statements = handle_if_return(statements, compressor);
|
||||
}
|
||||
if (compressor.sequences_limit > 0) {
|
||||
statements = sequencesize(statements, compressor);
|
||||
sequencesize(statements, compressor);
|
||||
}
|
||||
if (compressor.option("join_vars")) {
|
||||
join_consecutive_vars(statements, compressor);
|
||||
|
|
@ -1093,15 +1093,16 @@ merge(Compressor.prototype, {
|
|||
};
|
||||
|
||||
function sequencesize(statements, compressor) {
|
||||
if (statements.length < 2) return statements;
|
||||
var seq = [], ret = [];
|
||||
if (statements.length < 2) return;
|
||||
var seq = [], n = 0;
|
||||
function push_seq() {
|
||||
if (!seq.length) return;
|
||||
var body = make_sequence(seq[0], seq);
|
||||
ret.push(make_node(AST_SimpleStatement, body, { body: body }));
|
||||
statements[n++] = make_node(AST_SimpleStatement, body, { body: body });
|
||||
seq = [];
|
||||
};
|
||||
statements.forEach(function(stat){
|
||||
}
|
||||
for (var i = 0, len = statements.length; i < len; i++) {
|
||||
var stat = statements[i];
|
||||
if (stat instanceof AST_SimpleStatement) {
|
||||
if (seq.length >= compressor.sequences_limit) push_seq();
|
||||
var body = stat.body;
|
||||
|
|
@ -1109,18 +1110,18 @@ merge(Compressor.prototype, {
|
|||
if (body) merge_sequence(seq, body);
|
||||
} else {
|
||||
push_seq();
|
||||
ret.push(stat);
|
||||
statements[n++] = stat;
|
||||
}
|
||||
}
|
||||
});
|
||||
push_seq();
|
||||
ret = sequencesize_2(ret, compressor);
|
||||
CHANGED = ret.length != statements.length;
|
||||
return ret;
|
||||
statements.length = n;
|
||||
sequencesize_2(statements, compressor);
|
||||
CHANGED = statements.length != len;
|
||||
};
|
||||
|
||||
function sequencesize_2(statements, compressor) {
|
||||
function cons_seq(right) {
|
||||
ret.pop();
|
||||
n--;
|
||||
var left = prev.body;
|
||||
if (!(left instanceof AST_Sequence)) {
|
||||
left = make_node(AST_Sequence, left, {
|
||||
|
|
@ -1130,8 +1131,9 @@ merge(Compressor.prototype, {
|
|||
merge_sequence(left.expressions, right);
|
||||
return left.transform(compressor);
|
||||
};
|
||||
var ret = [], prev = null;
|
||||
statements.forEach(function(stat){
|
||||
var n = 0, prev;
|
||||
for (var i = 0, len = statements.length; i < len; i++) {
|
||||
var stat = statements[i];
|
||||
if (prev) {
|
||||
if (stat instanceof AST_For) {
|
||||
try {
|
||||
|
|
@ -1144,7 +1146,7 @@ merge(Compressor.prototype, {
|
|||
}
|
||||
else if (!stat.init) {
|
||||
stat.init = prev.body.drop_side_effect_free(compressor);
|
||||
ret.pop();
|
||||
n--;
|
||||
}
|
||||
} catch(ex) {
|
||||
if (ex !== cons_seq) throw ex;
|
||||
|
|
@ -1166,11 +1168,11 @@ merge(Compressor.prototype, {
|
|||
stat.expression = cons_seq(stat.expression);
|
||||
}
|
||||
}
|
||||
ret.push(stat);
|
||||
statements[n++] = stat;
|
||||
prev = stat instanceof AST_SimpleStatement ? stat : null;
|
||||
});
|
||||
return ret;
|
||||
};
|
||||
}
|
||||
statements.length = n;
|
||||
}
|
||||
|
||||
function join_consecutive_vars(statements, compressor) {
|
||||
for (var i = 0, j = -1, len = statements.length; i < len; i++) {
|
||||
|
|
@ -1197,8 +1199,7 @@ merge(Compressor.prototype, {
|
|||
}
|
||||
statements.length = j + 1;
|
||||
};
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
function extract_functions_from_statement_array(statements) {
|
||||
var funs = [];
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user