@@ -5017,20 +5017,22 @@ merge(Compressor.prototype, {
|
|||||||
return self;
|
return self;
|
||||||
});
|
});
|
||||||
|
|
||||||
function trim_block(node, in_list) {
|
function trim_block(node, parent, in_list) {
|
||||||
switch (node.body.length) {
|
switch (node.body.length) {
|
||||||
case 0:
|
case 0:
|
||||||
return in_list ? List.skip : make_node(AST_EmptyStatement, node);
|
return in_list ? List.skip : make_node(AST_EmptyStatement, node);
|
||||||
case 1:
|
case 1:
|
||||||
var stat = node.body[0];
|
var stat = node.body[0];
|
||||||
if (!(stat instanceof AST_Const || stat instanceof AST_Let)) return stat;
|
if (stat instanceof AST_Const || stat instanceof AST_Let) return node;
|
||||||
|
if (parent instanceof AST_IterationStatement && stat instanceof AST_LambdaDefinition) return node;
|
||||||
|
return stat;
|
||||||
}
|
}
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
OPT(AST_BlockStatement, function(self, compressor) {
|
OPT(AST_BlockStatement, function(self, compressor) {
|
||||||
self.body = tighten_body(self.body, compressor);
|
self.body = tighten_body(self.body, compressor);
|
||||||
return trim_block(self);
|
return trim_block(self, compressor.parent());
|
||||||
});
|
});
|
||||||
|
|
||||||
function drop_rest_farg(fn, compressor) {
|
function drop_rest_farg(fn, compressor) {
|
||||||
@@ -6123,7 +6125,7 @@ merge(Compressor.prototype, {
|
|||||||
}
|
}
|
||||||
}, function(node, in_list) {
|
}, function(node, in_list) {
|
||||||
if (node instanceof AST_BlockStatement) {
|
if (node instanceof AST_BlockStatement) {
|
||||||
return trim_block(node, in_list);
|
return trim_block(node, tt.parent(), in_list);
|
||||||
} else if (node instanceof AST_For) {
|
} else if (node instanceof AST_For) {
|
||||||
// Certain combination of unused name + side effect leads to invalid AST:
|
// Certain combination of unused name + side effect leads to invalid AST:
|
||||||
// https://github.com/mishoo/UglifyJS/issues/44
|
// https://github.com/mishoo/UglifyJS/issues/44
|
||||||
@@ -7282,7 +7284,7 @@ merge(Compressor.prototype, {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.body = trim_block(self.body);
|
self.body = trim_block(self.body, compressor.parent());
|
||||||
}
|
}
|
||||||
if (self.body instanceof AST_EmptyStatement) return make_node(AST_For, self, self).optimize(compressor);
|
if (self.body instanceof AST_EmptyStatement) return make_node(AST_For, self, self).optimize(compressor);
|
||||||
if (self.body instanceof AST_SimpleStatement) return make_node(AST_For, self, {
|
if (self.body instanceof AST_SimpleStatement) return make_node(AST_For, self, {
|
||||||
|
|||||||
@@ -5409,3 +5409,30 @@ issue_4612_4: {
|
|||||||
}
|
}
|
||||||
expect_stdout: "undefined"
|
expect_stdout: "undefined"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
issue_4655: {
|
||||||
|
options = {
|
||||||
|
functions: true,
|
||||||
|
loops: true,
|
||||||
|
reduce_vars: true,
|
||||||
|
side_effects: true,
|
||||||
|
unused: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
(function f() {
|
||||||
|
while (console.log("PASS")) {
|
||||||
|
var g = function() {};
|
||||||
|
for (var a in g)
|
||||||
|
g();
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
(function() {
|
||||||
|
for (; console.log("PASS");) {
|
||||||
|
function g() {};
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
expect_stdout: "PASS"
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user