avoid evaluate of compound assignment after dead_code transform

fixes #2860
This commit is contained in:
alexlamsl 2018-02-01 15:09:02 +08:00
parent 2a4c68be4f
commit 6a7feac97c
3 changed files with 79 additions and 0 deletions

View File

@ -5357,6 +5357,7 @@ merge(Compressor.prototype, {
if (in_try(level, parent instanceof AST_Throw)) break;
if (is_reachable(def.scope, [ def ])) break;
if (self.operator == "=") return self.right;
def.fixed = false;
return make_node(AST_Binary, self, {
operator: self.operator.slice(0, -1),
left: self.left,

View File

@ -879,3 +879,41 @@ unsafe_builtin: {
z;
}
}
issue_2860_1: {
options = {
dead_code: true,
evaluate: true,
reduce_vars: true,
}
input: {
console.log(function(a) {
return a ^= 1;
}());
}
expect: {
console.log(function(a) {
return 1 ^ a;
}());
}
expect_stdout: "1"
}
issue_2860_2: {
options = {
dead_code: true,
evaluate: true,
inline: true,
passes: 2,
reduce_vars: true,
}
input: {
console.log(function(a) {
return a ^= 1;
}());
}
expect: {
console.log(1);
}
expect_stdout: "1"
}

View File

@ -5467,3 +5467,43 @@ chained_assignments: {
}
expect_stdout: "5eadbeef"
}
issue_2860_1: {
options = {
dead_code: true,
evaluate: true,
reduce_vars: true,
}
input: {
console.log(function(a) {
return a ^= 1;
a ^= 2;
}());
}
expect: {
console.log(function(a) {
return 1 ^ a;
}());
}
expect_stdout: "1"
}
issue_2860_2: {
options = {
dead_code: true,
evaluate: true,
inline: true,
passes: 2,
reduce_vars: true,
}
input: {
console.log(function(a) {
return a ^= 1;
a ^= 2;
}());
}
expect: {
console.log(1);
}
expect_stdout: "1"
}