fix corner case in reduce_funcs (#3592)
This commit is contained in:
@@ -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")
|
||||
@@ -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;
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -3097,8 +3100,7 @@ issue_3400_1: {
|
||||
});
|
||||
}
|
||||
expect: {
|
||||
void console.log(function() {
|
||||
function g() {
|
||||
void console.log(function g() {
|
||||
function h(u) {
|
||||
var o = {
|
||||
p: u
|
||||
@@ -3111,9 +3113,7 @@ issue_3400_1: {
|
||||
});
|
||||
}
|
||||
return e();
|
||||
}
|
||||
return g;
|
||||
}()()[0].p);
|
||||
}()[0].p);
|
||||
}
|
||||
expect_stdout: [
|
||||
"undefined",
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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",
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user