aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2021-01-24 14:15:43 +0000
committerGitHub <noreply@github.com>2021-01-24 22:15:43 +0800
commitfd7ad8e7792749c29dec2038bb6cc61cbb7721f1 (patch)
tree0f920c62e94e9cab93535cbfe6e3648e77ff7b0a
parenta36c5472d2cf9f79ca5245e9299a011ec7e4cef1 (diff)
downloadtracifyjs-fd7ad8e7792749c29dec2038bb6cc61cbb7721f1.tar.gz
tracifyjs-fd7ad8e7792749c29dec2038bb6cc61cbb7721f1.zip
fix corner cases in `collapse_vars` (#4591)
fixes #4590
-rw-r--r--lib/compress.js6
-rw-r--r--test/compress/bigint.js16
-rw-r--r--test/compress/collapse_vars.js5
-rw-r--r--test/compress/drop-unused.js3
-rw-r--r--test/compress/pure_getters.js4
5 files changed, 32 insertions, 2 deletions
diff --git a/lib/compress.js b/lib/compress.js
index e5ee7406..d79c1cce 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -2413,7 +2413,8 @@ merge(Compressor.prototype, {
if (expr instanceof AST_This) return rhs_exact_match;
if (expr.is_truthy()) return rhs_fuzzy_match(true, return_false);
if (expr.is_constant()) {
- return rhs_fuzzy_match(expr.evaluate(compressor), rhs_exact_match);
+ var ev = expr.evaluate(compressor);
+ if (!(ev instanceof AST_Node)) return rhs_fuzzy_match(ev, rhs_exact_match);
}
if (!(lhs instanceof AST_SymbolRef)) return false;
if (!invariant(expr)) return false;
@@ -2436,7 +2437,8 @@ merge(Compressor.prototype, {
return true;
}
if (node.is_constant()) {
- return !node.evaluate(compressor) == !value;
+ var ev = node.evaluate(compressor);
+ if (!(ev instanceof AST_Node)) return !ev == !value;
}
}
return fallback(node);
diff --git a/test/compress/bigint.js b/test/compress/bigint.js
index 7ee225ce..9c21d083 100644
--- a/test/compress/bigint.js
+++ b/test/compress/bigint.js
@@ -44,3 +44,19 @@ Number: {
expect_stdout: "-1148098955808013200"
node_version: ">=10"
}
+
+issue_4590: {
+ options = {
+ collapse_vars: true,
+ }
+ input: {
+ A = 1;
+ 0n || console.log("PASS");
+ }
+ expect: {
+ A = 1;
+ 0n || console.log("PASS");
+ }
+ expect_stdout: "PASS"
+ node_version: ">=10"
+}
diff --git a/test/compress/collapse_vars.js b/test/compress/collapse_vars.js
index 963906c5..04df8e11 100644
--- a/test/compress/collapse_vars.js
+++ b/test/compress/collapse_vars.js
@@ -5608,6 +5608,7 @@ collapse_rhs_array: {
collapse_rhs_boolean_1: {
options = {
collapse_vars: true,
+ evaluate: true,
}
input: {
var a, b;
@@ -5633,6 +5634,7 @@ collapse_rhs_boolean_1: {
collapse_rhs_boolean_2: {
options = {
collapse_vars: true,
+ evaluate: true,
}
input: {
var a;
@@ -5667,6 +5669,7 @@ collapse_rhs_boolean_3: {
booleans: true,
collapse_vars: true,
conditionals: true,
+ evaluate: true,
}
input: {
var a, f, g, h, i, n, s, t, x, y;
@@ -5720,6 +5723,7 @@ collapse_rhs_function: {
collapse_rhs_number: {
options = {
collapse_vars: true,
+ evaluate: true,
}
input: {
var a, b;
@@ -5799,6 +5803,7 @@ collapse_rhs_regexp: {
collapse_rhs_string: {
options = {
collapse_vars: true,
+ evaluate: true,
}
input: {
var a, b;
diff --git a/test/compress/drop-unused.js b/test/compress/drop-unused.js
index d00deca2..914e83ad 100644
--- a/test/compress/drop-unused.js
+++ b/test/compress/drop-unused.js
@@ -2138,6 +2138,7 @@ issue_3497: {
issue_3515_1: {
options = {
collapse_vars: true,
+ evaluate: true,
reduce_vars: true,
unused: true,
}
@@ -2189,6 +2190,7 @@ issue_3515_2: {
issue_3515_3: {
options = {
collapse_vars: true,
+ evaluate: true,
unused: true,
}
input: {
@@ -2256,6 +2258,7 @@ function_assign: {
issue_3598: {
options = {
collapse_vars: true,
+ evaluate: true,
reduce_vars: true,
unused: true,
}
diff --git a/test/compress/pure_getters.js b/test/compress/pure_getters.js
index 1cb2ff13..58920411 100644
--- a/test/compress/pure_getters.js
+++ b/test/compress/pure_getters.js
@@ -979,6 +979,7 @@ collapse_vars_2_strict: {
collapse_rhs_true: {
options = {
collapse_vars: true,
+ evaluate: true,
pure_getters: true,
}
input: {
@@ -1015,6 +1016,7 @@ collapse_rhs_true: {
collapse_rhs_false: {
options = {
collapse_vars: true,
+ evaluate: true,
pure_getters: false,
}
input: {
@@ -1051,6 +1053,7 @@ collapse_rhs_false: {
collapse_rhs_strict: {
options = {
collapse_vars: true,
+ evaluate: true,
pure_getters: "strict",
}
input: {
@@ -1087,6 +1090,7 @@ collapse_rhs_strict: {
collapse_rhs_setter: {
options = {
collapse_vars: true,
+ evaluate: true,
pure_getters: "strict",
}
input: {