fix corner case in evaluate (#3934)

fixes #3933
This commit is contained in:
Alex Lam S.L
2020-05-29 10:48:26 +01:00
committed by GitHub
parent 6a5c63e1e3
commit 60c0bc1e6b
4 changed files with 170 additions and 43 deletions

View File

@@ -917,7 +917,7 @@ collapse_vars_lvalues_drop_assign: {
}
}
collapse_vars_misc1: {
collapse_vars_misc: {
options = {
booleans: true,
collapse_vars: true,
@@ -971,8 +971,8 @@ collapse_vars_misc1: {
function f7() { var b = window.a * window.z; return b + b }
function f8() { var b = window.a * window.z; return b + (5 + b) }
function f9() { var b = window.a * window.z; return bar() || b }
function f10(x) { var a = 5; return a += 3; }
function f11(x) { var a = 5; return a += 2; }
function f10(x) { return 8; }
function f11(x) { return 7; }
}
}

View File

@@ -236,7 +236,7 @@ collapse_vars_lvalues_drop_assign: {
}
}
collapse_vars_misc1: {
collapse_vars_misc: {
options = {
collapse_vars: true,
dead_code: true,

View File

@@ -2503,7 +2503,7 @@ inlined_increment_prefix: {
expect: {
var a = 0;
void ++a;
console.log(a += 0);
console.log(1);
}
expect_stdout: "1"
}
@@ -2525,7 +2525,7 @@ inlined_increment_postfix: {
expect: {
var a = 0;
void a++;
console.log(a += 0);
console.log(1);
}
expect_stdout: "1"
}
@@ -2544,3 +2544,113 @@ compound_assignment_to_property: {
}
expect_stdout: "PASS"
}
issue_2208_assign: {
options = {
evaluate: true,
reduce_vars: true,
toplevel: true,
}
input: {
a = 42;
console.log({
p: function() {
return function() {
return this.a;
}();
}
}.p());
}
expect: {
a = 42;
console.log({
p: function() {
return function() {
return this.a;
}();
}
}.p());
}
expect_stdout: "42"
}
issue_2208_postfix: {
options = {
evaluate: true,
reduce_vars: true,
toplevel: true,
}
input: {
a = 41;
a++;
console.log({
p: function() {
return function() {
return this.a;
}();
}
}.p());
}
expect: {
a = 41;
a++;
console.log({
p: function() {
return function() {
return this.a;
}();
}
}.p());
}
expect_stdout: "42"
}
issue_2208_prefix: {
options = {
evaluate: true,
reduce_vars: true,
toplevel: true,
}
input: {
a = 43;
--a;
console.log({
p: function() {
return function() {
return this.a;
}();
}
}.p());
}
expect: {
a = 43;
--a;
console.log({
p: function() {
return function() {
return this.a;
}();
}
}.p());
}
expect_stdout: "42"
}
issue_3933: {
options = {
evaluate: true,
reduce_vars: true,
unused: true,
}
input: {
(function(a, b) {
a && (b ^= 1) && console.log("PASS");
})(1);
}
expect: {
(function(a, b) {
1, (b ^= 1), console.log("PASS");
})();
}
expect_stdout: "PASS"
}