From 33f3b0c1d9654e137b54802afbfb6d8e70c8cbd6 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Sun, 10 May 2020 09:35:03 +0100 Subject: [PATCH] fix corner case in `reduce_vars` (#3867) fixes #3866 --- lib/compress.js | 10 ++++++---- test/compress/reduce_vars.js | 21 +++++++++++++++++++++ test/ufuzz/index.js | 2 +- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index fb4836bf..6e0d36a7 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -577,9 +577,10 @@ merge(Compressor.prototype, { sym.fixed = d.fixed = eq ? function() { return node.right; } : function() { - return make_node(AST_Binary, node, { + var value = fixed instanceof AST_Node ? fixed : fixed(); + return value && make_node(AST_Binary, node, { operator: node.operator.slice(0, -1), - left: fixed instanceof AST_Node ? fixed : fixed(), + left: value, right: node.right }); }; @@ -858,11 +859,12 @@ merge(Compressor.prototype, { var fixed = d.fixed; if (!fixed) return; exp.fixed = d.fixed = function() { - return make_node(AST_Binary, node, { + var value = fixed instanceof AST_Node ? fixed : fixed(); + return value && make_node(AST_Binary, node, { operator: node.operator.slice(0, -1), left: make_node(AST_UnaryPrefix, node, { operator: "+", - expression: fixed instanceof AST_Node ? fixed : fixed() + expression: value }), right: make_node(AST_Number, node, { value: 1 diff --git a/test/compress/reduce_vars.js b/test/compress/reduce_vars.js index 67d473dd..ec75e911 100644 --- a/test/compress/reduce_vars.js +++ b/test/compress/reduce_vars.js @@ -7033,3 +7033,24 @@ issue_3844: { } expect_stdout: "undefined" } + +issue_3866: { + options = { + dead_code: true, + evaluate: true, + reduce_vars: true, + } + input: { + console.log(function() { + { + return "PASS"; + var a = 0; + } + return --a; + }()); + } + expect: { + console.log("PASS"); + } + expect_stdout: "PASS" +} diff --git a/test/ufuzz/index.js b/test/ufuzz/index.js index 1a2163ed..616378cf 100644 --- a/test/ufuzz/index.js +++ b/test/ufuzz/index.js @@ -1181,7 +1181,7 @@ for (var round = 1; round <= num_iterations; round++) { } } } else { - uglify_code = uglify_code.error; + uglify_code = uglify_result = uglify_code.error; ok = sandbox.same_stdout(original_result, uglify_result); } if (verbose || (verbose_interval && !(round % INTERVAL_COUNT)) || !ok) log(options); -- 2.34.1