diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2021-01-24 14:15:43 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-24 22:15:43 +0800 |
commit | fd7ad8e7792749c29dec2038bb6cc61cbb7721f1 (patch) | |
tree | 0f920c62e94e9cab93535cbfe6e3648e77ff7b0a | |
parent | a36c5472d2cf9f79ca5245e9299a011ec7e4cef1 (diff) | |
download | tracifyjs-fd7ad8e7792749c29dec2038bb6cc61cbb7721f1.tar.gz tracifyjs-fd7ad8e7792749c29dec2038bb6cc61cbb7721f1.zip |
fix corner cases in `collapse_vars` (#4591)
fixes #4590
-rw-r--r-- | lib/compress.js | 6 | ||||
-rw-r--r-- | test/compress/bigint.js | 16 | ||||
-rw-r--r-- | test/compress/collapse_vars.js | 5 | ||||
-rw-r--r-- | test/compress/drop-unused.js | 3 | ||||
-rw-r--r-- | test/compress/pure_getters.js | 4 |
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: { |