Skip to content

Commit

Permalink
fix corner case in reduce_funcs (#3592)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexlamsl committed Nov 17, 2019
1 parent 10c1a78 commit 8504a4e
Show file tree
Hide file tree
Showing 2 changed files with 120 additions and 32 deletions.
2 changes: 2 additions & 0 deletions lib/compress.js
Expand Up @@ -5369,6 +5369,7 @@ merge(Compressor.prototype, {
&& !fn.contains_this()
&& can_inject_symbols()) {
fn._squeezed = true;
if (exp !== fn) fn.parent_scope = exp.scope;
return make_sequence(self, flatten_fn()).optimize(compressor);
}
if (compressor.option("side_effects")
Expand Down Expand Up @@ -6382,6 +6383,7 @@ merge(Compressor.prototype, {
} while (scope = scope.parent_scope);
}
}
if (single_use) fixed.parent_scope = self.scope;
}
if (single_use && fixed) {
def.single_use = false;
Expand Down
150 changes: 118 additions & 32 deletions test/compress/functions.js
Expand Up @@ -2416,7 +2416,7 @@ issue_3297_2: {
doProcessOne({
param1: param1,
param2: param2,
}, function () {
}, function() {
processBulk(bulk);
});
};
Expand Down Expand Up @@ -2497,7 +2497,7 @@ issue_3297_3: {
doProcessOne({
param1: param1,
param2: param2,
}, function () {
}, function() {
processBulk(bulk);
});
};
Expand All @@ -2514,18 +2514,21 @@ issue_3297_3: {
}).processBulk([1, 2, 3]);
}
expect: {
function function1(u) {
function function1(c) {
return {
processBulk: function n(r) {
var o, t = u();
r && 0 < r.length && (o = {
param1: r.shift(),
processBulk: function n(o) {
var r, t, u = c();
o && 0 < o.length && (r = {
param1: o.shift(),
param2: {
subparam1: t
subparam1: u
}
},
console.log(JSON.stringify(o)),
n(r));
t = function() {
n(o);
},
console.log(JSON.stringify(r)),
t());
}
};
}
Expand Down Expand Up @@ -3097,23 +3100,20 @@ issue_3400_1: {
});
}
expect: {
void console.log(function() {
function g() {
function h(u) {
var o = {
p: u
};
return console.log(o[g]), o;
}
function e() {
return [ 42 ].map(function(v) {
return h(v);
});
}
return e();
void console.log(function g() {
function h(u) {
var o = {
p: u
};
return console.log(o[g]), o;
}
return g;
}()()[0].p);
function e() {
return [ 42 ].map(function(v) {
return h(v);
});
}
return e();
}()[0].p);
}
expect_stdout: [
"undefined",
Expand Down Expand Up @@ -3154,12 +3154,10 @@ issue_3400_2: {
expect: {
void console.log(function g() {
return [ 42 ].map(function(v) {
return function(u) {
var o = {
p: u
};
return console.log(o[g]), o;
}(v);
return o = {
p: v
}, console.log(o[g]), o;
var o;
});
}()[0].p);
}
Expand Down Expand Up @@ -3401,3 +3399,91 @@ issue_3562: {
}
expect_stdout: "PASS"
}

hoisted_inline: {
options = {
inline: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
function f() {
console.log("PASS");
}
function g() {
for (var console in [ 0 ])
h();
}
function h() {
f();
}
g();
}
expect: {
function f() {
console.log("PASS");
}
(function() {
for (var console in [ 0 ])
void f();
})();
}
expect_stdout: "PASS"
}

hoisted_single_use: {
options = {
reduce_funcs: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
function f(a) {
for (var r in a) g(r);
}
function g(a) {
console.log(a);
}
function h(a) {
var g = a.bar;
g();
g();
i(a);
}
function i(b) {
f(b);
}
h({
bar: function() {
console.log("foo");
}
});
}
expect: {
function f(a) {
for (var r in a) g(r);
}
function g(a) {
console.log(a);
}
(function(a) {
var g = a.bar;
g();
g();
(function(b) {
f(b);
})(a);
})({
bar: function() {
console.log("foo");
}
});
}
expect_stdout: [
"foo",
"foo",
"bar",
]
}

0 comments on commit 8504a4e

Please sign in to comment.