diff --git a/lib/compress.js b/lib/compress.js index 3a361521..469ba980 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -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 = [];