patch up #1543 for harmony

fixes #1537
This commit is contained in:
kzc
2017-03-05 16:15:13 +08:00
committed by alexlamsl
parent 49d9ac1c43
commit 33a26d456b
2 changed files with 80 additions and 0 deletions

View File

@@ -549,6 +549,7 @@ merge(Compressor.prototype, {
if (var_decl.value.is_constant()) { if (var_decl.value.is_constant()) {
var ctt = new TreeTransformer(function(node) { var ctt = new TreeTransformer(function(node) {
if (node === ref if (node === ref
&& !ctt.find_parent(AST_Destructuring)
&& !ctt.find_parent(AST_ForIn)) { && !ctt.find_parent(AST_ForIn)) {
return replace_var(node, ctt.parent(), true); return replace_var(node, ctt.parent(), true);
} }
@@ -581,6 +582,7 @@ merge(Compressor.prototype, {
if (unwind) return node; if (unwind) return node;
var parent = tt.parent(); var parent = tt.parent();
if (node instanceof AST_Lambda if (node instanceof AST_Lambda
|| node instanceof AST_Destructuring
|| node instanceof AST_Try || node instanceof AST_Try
|| node instanceof AST_With || node instanceof AST_With
|| node instanceof AST_Case || node instanceof AST_Case

View File

@@ -1343,3 +1343,81 @@ issue_1537_for_of: {
for (k of {prop: 'val'}); for (k of {prop: 'val'});
} }
} }
issue_1537_destructuring_1: {
options = {
collapse_vars: true,
}
input: {
var x = 1, y = 2;
[x] = [y];
}
expect: {
var x = 1;
[x] = [2];
}
}
issue_1537_destructuring_2: {
options = {
collapse_vars: true,
}
input: {
var x = foo();
[x] = [1];
}
expect: {
var x = foo();
[x] = [1];
}
}
issue_1537_destructuring_3: {
options = {
collapse_vars: true,
}
input: {
var x = Math.random();
({p: x = 9} = {v: 1});
}
expect: {
var x = Math.random();
({p: x = 9} = {v: 1});
}
}
issue_1537_destructuring_for_in: {
options = {
collapse_vars: true,
}
input: {
var x = 1, y = 2;
(function() {
for ([[x], y] in a);
})();
}
expect: {
var x = 1, y = 2;
(function() {
for ([[x], y] in a);
})();
}
}
issue_1537_destructuring_for_of: {
options = {
collapse_vars: true,
}
input: {
var x = 1, y = 2;
(function() {
for ([[x], y] of a);
})();
}
expect: {
var x = 1, y = 2;
(function() {
for ([[x], y] of a);
})();
}
}