From 7e0ad232b079202024ea845a2076ee78e1e0dbd7 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Sun, 10 May 2020 18:07:05 +0100 Subject: [PATCH] retain `@__PURE__` call when return value is used (#3874) --- lib/compress.js | 1 + test/compress/pure_funcs.js | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/lib/compress.js b/lib/compress.js index 5509137b..6a444e92 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -3499,6 +3499,7 @@ merge(Compressor.prototype, { if (fn instanceof AST_Lambda) { if (fn.evaluating) return this; if (fn.name && fn.name.definition().recursive_refs > 0) return this; + if (this.is_expr_pure(compressor)) return this; var stat = fn.first_statement(); if (!(stat instanceof AST_Return)) return this; var args = eval_args(this.args); diff --git a/test/compress/pure_funcs.js b/test/compress/pure_funcs.js index 15ddf095..d65399f1 100644 --- a/test/compress/pure_funcs.js +++ b/test/compress/pure_funcs.js @@ -782,3 +782,28 @@ inline_pure_call_3: { "undefined", ] } + +inline_pure_call_4: { + options = { + evaluate: true, + reduce_vars: true, + toplevel: true, + unused: true, + } + input: { + var a = /*@__PURE__*/ function() { + return console.log("PASS"), 42; + }(); + console.log(a); + } + expect: { + var a = function() { + return console.log("PASS"), 42; + }(); + console.log(a); + } + expect_stdout: [ + "PASS", + "42", + ] +} -- 2.34.1