Skip to content

Commit

Permalink
reduce overlap of sequences & side_effects (#5344)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexlamsl committed Feb 7, 2022
1 parent 327e94a commit b6c72c8
Show file tree
Hide file tree
Showing 9 changed files with 278 additions and 15 deletions.
4 changes: 1 addition & 3 deletions lib/compress.js
Expand Up @@ -3637,9 +3637,7 @@ Compressor.prototype.compress = function(node) {
var stat = statements[i];
if (stat instanceof AST_SimpleStatement) {
if (seq.length >= compressor.sequences_limit) push_seq();
var body = stat.body;
if (seq.length > 0) body = body.drop_side_effect_free(compressor);
if (body) merge_sequence(seq, body);
merge_sequence(seq, stat.body);
} else if (is_declaration(stat)) {
statements[n++] = stat;
} else {
Expand Down
1 change: 1 addition & 0 deletions test/compress/drop-unused.js
Expand Up @@ -3358,6 +3358,7 @@ issue_4806_1: {
issue_4806_2: {
options = {
sequences: true,
side_effects: true,
toplevel: true,
unused: true,
}
Expand Down
1 change: 1 addition & 0 deletions test/compress/functions.js
Expand Up @@ -6135,6 +6135,7 @@ issue_4265: {
dead_code: true,
inline: true,
sequences: true,
side_effects: true,
}
input: {
function f() {
Expand Down
40 changes: 38 additions & 2 deletions test/compress/ie.js
Expand Up @@ -2631,13 +2631,14 @@ issue_3999: {
]
}

issue_4001: {
issue_4001_1: {
options = {
collapse_vars: true,
ie: true,
inline: true,
reduce_vars: true,
sequences: true,
side_effects: false,
toplevel: true,
unused: true,
}
Expand All @@ -2660,7 +2661,42 @@ issue_4001: {
return a;
}
var a;
console.log((a = 42, void f()[42], void function a() {}));
console.log((a = 42, f()[42], void f, void function a() {}));
}
expect_stdout: "undefined"
}

issue_4001_2: {
options = {
collapse_vars: true,
ie: true,
inline: true,
reduce_vars: true,
sequences: true,
side_effects: true,
toplevel: true,
unused: true,
}
input: {
console.log(function(a) {
function f() {
return a;
var b;
}
var c = f();
(function g() {
c[42];
f;
})();
(function a() {});
}(42));
}
expect: {
function f() {
return a;
}
var a;
console.log((a = 42, void f()[42]));
}
expect_stdout: "undefined"
}
Expand Down
32 changes: 30 additions & 2 deletions test/compress/issue-640.js
Expand Up @@ -317,7 +317,35 @@ iife: {
typeof function g() {}();
}
expect: {
x = 42, function a() {}(), function b() {}(), function c() {}(),
function d() {}(), function e() {}(), function f() {}(), typeof function g() {}();
x = 42,
function a() {}(),
!function b() {}(),
~function c() {}(),
+function d() {}(),
-function e() {}(),
void function f() {}(),
typeof function g() {}();
}
}

iife_drop_side_effect_free: {
options = {
expression: true,
sequences: true,
side_effects: true,
}
input: {
x = 42;
(function a() {})();
!function b() {}();
~function c() {}();
+function d() {}();
-function e() {}();
void function f() {}();
typeof function g() {}();
}
expect: {
x = 42,
typeof void 0;
}
}
1 change: 1 addition & 0 deletions test/compress/merge_vars.js
Expand Up @@ -253,6 +253,7 @@ read_before_assign_1: {
inline: true,
merge_vars: true,
sequences: true,
side_effects: true,
toplevel: true,
}
input: {
Expand Down
72 changes: 66 additions & 6 deletions test/compress/negate-iife.js
Expand Up @@ -122,13 +122,41 @@ negate_iife_4: {
sequences: true,
}
input: {
(function(){ return t })() ? console.log(true) : console.log(false);
(function(){
(function() {
return t;
})() ? console.log(true) : console.log(false);
(function() {
console.log("something");
})();
}
expect: {
!function() {
return t;
}() ? console.log(false) : console.log(true), !function() {
console.log("something");
}();
}
}

negate_iife_4_drop_side_effect_free: {
options = {
conditionals: true,
negate_iife: true,
sequences: true,
side_effects: true,
}
input: {
(function() {
return t;
})() ? console.log(true) : console.log(false);
(function() {
console.log("something");
})();
}
expect: {
!function(){ return t }() ? console.log(false) : console.log(true), function(){
!function() {
return t;
}() ? console.log(false) : console.log(true), function() {
console.log("something");
}();
}
Expand Down Expand Up @@ -176,17 +204,49 @@ negate_iife_5: {
sequences: true,
}
input: {
if ((function(){ return t })()) {
if (function() {
return t;
}()) {
foo(true);
} else {
bar(false);
}
(function(){
(function() {
console.log("something");
})();
}
expect: {
!function(){ return t }() ? bar(false) : foo(true), function(){
!function() {
return t;
}() ? bar(false) : foo(true), !function() {
console.log("something");
}();
}
}

negate_iife_5_drop_side_effect_free: {
options = {
conditionals: true,
negate_iife: true,
sequences: true,
side_effects: true,
}
input: {
if (function() {
return t;
}()) {
foo(true);
} else {
bar(false);
}
(function() {
console.log("something");
})();
}
expect: {
!function() {
return t;
}() ? bar(false) : foo(true), function() {
console.log("something");
}();
}
Expand Down
1 change: 1 addition & 0 deletions test/compress/pure_getters.js
Expand Up @@ -1289,6 +1289,7 @@ issue_2878: {
collapse_vars: true,
pure_getters: true,
sequences: true,
side_effects: true,
}
input: {
var c = 0;
Expand Down

0 comments on commit b6c72c8

Please sign in to comment.