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