@@ -3540,8 +3540,9 @@ Compressor.prototype.compress = function(node) {
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
var loop = in_loop && in_try && in_try.bfinally ? "try" : in_loop;
|
||||
for (; index >= 0; index--) {
|
||||
var inlined = statements[index].try_inline(compressor, block_scope, true, in_loop);
|
||||
var inlined = statements[index].try_inline(compressor, block_scope, true, loop);
|
||||
if (!inlined) continue;
|
||||
statements[index] = inlined;
|
||||
changed = true;
|
||||
@@ -13263,6 +13264,11 @@ Compressor.prototype.compress = function(node) {
|
||||
return this;
|
||||
});
|
||||
def(AST_New, noop);
|
||||
def(AST_Return, function(compressor, scope, no_return, in_loop) {
|
||||
var value = this.value;
|
||||
if (value) value = value.try_inline(compressor, scope, undefined, in_loop === "try");
|
||||
return value || this;
|
||||
});
|
||||
function inline_sequence(compressor, scope, no_return, in_loop, node, skip) {
|
||||
var body = [], exprs = node.expressions, no_ret = no_return;
|
||||
for (var i = exprs.length - (skip || 0), j = i; --i >= 0; no_ret = true) {
|
||||
@@ -13363,10 +13369,8 @@ Compressor.prototype.compress = function(node) {
|
||||
|
||||
OPT(AST_Return, function(self, compressor) {
|
||||
var value = self.value;
|
||||
if (!value) return self;
|
||||
var inlined = value.try_inline(compressor);
|
||||
if (inlined) return inlined;
|
||||
if (compressor.option("side_effects")
|
||||
&& value
|
||||
&& is_undefined(value, compressor)
|
||||
&& !in_async_generator(compressor.find_parent(AST_Scope))) {
|
||||
self.value = null;
|
||||
|
||||
@@ -1233,8 +1233,11 @@ issue_2105_2: {
|
||||
issue_2105_3: {
|
||||
options = {
|
||||
inline: true,
|
||||
passes: 2,
|
||||
join_vars: true,
|
||||
passes: 3,
|
||||
reduce_vars: true,
|
||||
side_effects: true,
|
||||
sequences: true,
|
||||
unused: true,
|
||||
}
|
||||
input: {
|
||||
@@ -1258,12 +1261,12 @@ issue_2105_3: {
|
||||
});
|
||||
}
|
||||
expect: {
|
||||
!void void {
|
||||
({
|
||||
prop: function() {
|
||||
console.log;
|
||||
void console.log("PASS");
|
||||
}
|
||||
}.prop();
|
||||
console.log,
|
||||
console.log("PASS");
|
||||
},
|
||||
}).prop();
|
||||
}
|
||||
expect_stdout: "PASS"
|
||||
}
|
||||
|
||||
@@ -6152,10 +6152,8 @@ issue_4265: {
|
||||
}
|
||||
expect: {
|
||||
function f() {
|
||||
return console, function() {
|
||||
console.log(a);
|
||||
var a;
|
||||
}(), 0;
|
||||
var a;
|
||||
return console, console.log(a), 0;
|
||||
}
|
||||
f();
|
||||
}
|
||||
@@ -8046,3 +8044,40 @@ issue_5290: {
|
||||
}
|
||||
expect_stdout: "PASS"
|
||||
}
|
||||
|
||||
issue_5296: {
|
||||
options = {
|
||||
inline: true,
|
||||
}
|
||||
input: {
|
||||
var a = "PASS";
|
||||
(function() {
|
||||
for (var i = 0; i < 2; i++)
|
||||
try {
|
||||
return function() {
|
||||
while (!console);
|
||||
var b = b && (a = b) || "FAIL";
|
||||
}();
|
||||
} finally {
|
||||
continue;
|
||||
}
|
||||
})();
|
||||
console.log(a);
|
||||
}
|
||||
expect: {
|
||||
var a = "PASS";
|
||||
(function() {
|
||||
for (var i = 0; i < 2; i++)
|
||||
try {
|
||||
b = void 0;
|
||||
while (!console);
|
||||
var b = b && (a = b) || "FAIL";
|
||||
return;
|
||||
} finally {
|
||||
continue;
|
||||
}
|
||||
})();
|
||||
console.log(a);
|
||||
}
|
||||
expect_stdout: "PASS"
|
||||
}
|
||||
|
||||
@@ -595,10 +595,10 @@ issue_3600_2: {
|
||||
expect: {
|
||||
var c = 0;
|
||||
(function() {
|
||||
if ([][c++]) {
|
||||
var b = --b;
|
||||
if ([][c++])
|
||||
b = --b,
|
||||
c = 42;
|
||||
}
|
||||
var b;
|
||||
})();
|
||||
console.log(c);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user