From 8158b1bdcf9ad194876fb0bc746346eb9154614a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mateusz=20Burzy=C5=84ski?= Date: Sat, 9 Sep 2017 20:08:15 +0200 Subject: [PATCH] Testing all leading comments against being PURE comments (#2305) --- lib/compress.js | 8 +++-- test/compress/issue-1261.js | 61 +++++++++++++++++++++---------------- 2 files changed, 40 insertions(+), 29 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index 0ba2951b..da68dbc7 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -1980,12 +1980,14 @@ merge(Compressor.prototype, { if (!compressor.option("side_effects")) return false; if (this.pure !== undefined) return this.pure; var pure = false; - var comments, last_comment; + var comments, pure_comment; if (this.start && (comments = this.start.comments_before) && comments.length - && /[@#]__PURE__/.test((last_comment = comments[comments.length - 1]).value)) { - pure = last_comment; + && (pure_comment = find_if(function (comment) { + return /[@#]__PURE__/.test(comment.value); + }, comments))) { + pure = pure_comment; } return this.pure = pure; }); diff --git a/test/compress/issue-1261.js b/test/compress/issue-1261.js index 343c175b..994a00b3 100644 --- a/test/compress/issue-1261.js +++ b/test/compress/issue-1261.js @@ -96,6 +96,13 @@ pure_function_calls_toplevel: { })(); })(); + // pure top-level calls will be dropped regardless of the leading comments position + var MyClass = /*#__PURE__*//*@class*/(function(){ + function MyClass() {} + MyClass.prototype.method = function() {}; + return MyClass; + })(); + // comment #__PURE__ comment bar(), baz(), quux(); a.b(), /* @__PURE__ */ c.d.e(), f.g(); @@ -110,10 +117,12 @@ pure_function_calls_toplevel: { "WARN: Dropping __PURE__ call [test/compress/issue-1261.js:92,37]", "WARN: Dropping unused variable iife2 [test/compress/issue-1261.js:92,16]", "WARN: Dropping side-effect-free statement [test/compress/issue-1261.js:90,8]", - "WARN: Dropping __PURE__ call [test/compress/issue-1261.js:100,8]", - "WARN: Dropping __PURE__ call [test/compress/issue-1261.js:101,31]", + "WARN: Dropping __PURE__ call [test/compress/issue-1261.js:107,8]", + "WARN: Dropping __PURE__ call [test/compress/issue-1261.js:108,31]", "WARN: Dropping __PURE__ call [test/compress/issue-1261.js:84,33]", "WARN: Dropping unused variable iife1 [test/compress/issue-1261.js:84,12]", + "WARN: Dropping __PURE__ call [test/compress/issue-1261.js:100,45]", + "WARN: Dropping unused variable MyClass [test/compress/issue-1261.js:100,12]", ] } @@ -148,29 +157,29 @@ should_warn: { baz(); } expect_warnings: [ - "WARN: Dropping __PURE__ call [test/compress/issue-1261.js:128,61]", - "WARN: Dropping __PURE__ call [test/compress/issue-1261.js:128,23]", - "WARN: Dropping side-effect-free statement [test/compress/issue-1261.js:128,23]", - "WARN: Boolean || always true [test/compress/issue-1261.js:129,23]", - "WARN: Dropping __PURE__ call [test/compress/issue-1261.js:129,23]", - "WARN: Condition always true [test/compress/issue-1261.js:129,23]", - "WARN: Condition left of || always true [test/compress/issue-1261.js:130,8]", - "WARN: Condition always true [test/compress/issue-1261.js:130,8]", - "WARN: Boolean && always false [test/compress/issue-1261.js:131,23]", - "WARN: Dropping __PURE__ call [test/compress/issue-1261.js:131,23]", - "WARN: Condition always false [test/compress/issue-1261.js:131,23]", - "WARN: Condition left of && always false [test/compress/issue-1261.js:132,8]", - "WARN: Condition always false [test/compress/issue-1261.js:132,8]", - "WARN: + in boolean context always true [test/compress/issue-1261.js:133,23]", - "WARN: Dropping __PURE__ call [test/compress/issue-1261.js:133,23]", - "WARN: Condition always true [test/compress/issue-1261.js:133,23]", - "WARN: + in boolean context always true [test/compress/issue-1261.js:134,8]", - "WARN: Dropping __PURE__ call [test/compress/issue-1261.js:134,31]", - "WARN: Condition always true [test/compress/issue-1261.js:134,8]", - "WARN: Dropping __PURE__ call [test/compress/issue-1261.js:135,23]", - "WARN: Dropping __PURE__ call [test/compress/issue-1261.js:136,24]", - "WARN: Condition always true [test/compress/issue-1261.js:136,8]", - "WARN: Dropping __PURE__ call [test/compress/issue-1261.js:137,31]", - "WARN: Condition always false [test/compress/issue-1261.js:137,8]", + "WARN: Dropping __PURE__ call [test/compress/issue-1261.js:137,61]", + "WARN: Dropping __PURE__ call [test/compress/issue-1261.js:137,23]", + "WARN: Dropping side-effect-free statement [test/compress/issue-1261.js:137,23]", + "WARN: Boolean || always true [test/compress/issue-1261.js:138,23]", + "WARN: Dropping __PURE__ call [test/compress/issue-1261.js:138,23]", + "WARN: Condition always true [test/compress/issue-1261.js:138,23]", + "WARN: Condition left of || always true [test/compress/issue-1261.js:139,8]", + "WARN: Condition always true [test/compress/issue-1261.js:139,8]", + "WARN: Boolean && always false [test/compress/issue-1261.js:140,23]", + "WARN: Dropping __PURE__ call [test/compress/issue-1261.js:140,23]", + "WARN: Condition always false [test/compress/issue-1261.js:140,23]", + "WARN: Condition left of && always false [test/compress/issue-1261.js:141,8]", + "WARN: Condition always false [test/compress/issue-1261.js:141,8]", + "WARN: + in boolean context always true [test/compress/issue-1261.js:142,23]", + "WARN: Dropping __PURE__ call [test/compress/issue-1261.js:142,23]", + "WARN: Condition always true [test/compress/issue-1261.js:142,23]", + "WARN: + in boolean context always true [test/compress/issue-1261.js:143,8]", + "WARN: Dropping __PURE__ call [test/compress/issue-1261.js:143,31]", + "WARN: Condition always true [test/compress/issue-1261.js:143,8]", + "WARN: Dropping __PURE__ call [test/compress/issue-1261.js:144,23]", + "WARN: Dropping __PURE__ call [test/compress/issue-1261.js:145,24]", + "WARN: Condition always true [test/compress/issue-1261.js:145,8]", + "WARN: Dropping __PURE__ call [test/compress/issue-1261.js:146,31]", + "WARN: Condition always false [test/compress/issue-1261.js:146,8]", ] } -- 2.34.1