From ad139aa34d79ed34ad70290c48e0a54985ac017f Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Tue, 27 Jun 2017 01:13:00 +0800 Subject: [PATCH] fix `side_effects` on `AST_Expansion` (#2165) fixes #2163 --- lib/ast.js | 2 +- lib/compress.js | 3 +++ test/compress/drop-unused.js | 17 +++++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/ast.js b/lib/ast.js index 7668dabf..974d4c1b 100644 --- a/lib/ast.js +++ b/lib/ast.js @@ -345,7 +345,7 @@ var AST_Toplevel = DEFNODE("Toplevel", "globals", { var AST_Expansion = DEFNODE("Expansion", "expression", { $documentation: "An expandible argument, such as ...rest, a splat, such as [1,2,...all], or an expansion in a variable declaration, such as var [first, ...rest] = list", $propdoc: { - expression: "AST_Symbol the thing to be expanded" + expression: "[AST_Node] the thing to be expanded" }, _walk: function(visitor) { var self = this; diff --git a/lib/compress.js b/lib/compress.js index d2e1e939..f028deee 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -2672,6 +2672,9 @@ merge(Compressor.prototype, { if (expr) merge_sequence(expressions, expr); return make_sequence(this, expressions); }); + def(AST_Expansion, function(compressor, first_in_statement){ + return this.expression.drop_side_effect_free(compressor, first_in_statement); + }); })(function(node, func){ node.DEFMETHOD("drop_side_effect_free", func); }); diff --git a/test/compress/drop-unused.js b/test/compress/drop-unused.js index 081df308..0a810470 100644 --- a/test/compress/drop-unused.js +++ b/test/compress/drop-unused.js @@ -1409,3 +1409,20 @@ issue_2136_3: { expect_stdout: "2" node_version: ">=6" } + +issue_2163: { + options = { + pure_funcs: [ "pure" ], + side_effects: true, + } + input: { + var c; + /*@__PURE__*/f(...a); + pure(b, ...c); + } + expect: { + var c; + a; + b; + } +}