From 3564b4f20dfd2ec06dd162ce5c22b1b3f2e03c7f Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Sat, 6 Jan 2018 21:04:47 +0800 Subject: [PATCH] compress `RegExp()` in `unsafe` (#2735) --- lib/compress.js | 21 +++++++++++++++++++++ test/compress/issue-269.js | 24 ++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/lib/compress.js b/lib/compress.js index 0f15eb7e..28d6a1c4 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -3869,6 +3869,27 @@ merge(Compressor.prototype, { operator: "!" }).optimize(compressor); break; + case "RegExp": + var params = []; + if (all(self.args, function(arg) { + var value = arg.evaluate(compressor); + params.unshift(value); + return arg !== value; + })) { + try { + return best_of(compressor, self, make_node(AST_RegExp, self, { + value: RegExp.apply(RegExp, params), + })); + } catch (ex) { + compressor.warn("Error converting {expr} [{file}:{line},{col}]", { + expr: self.print_to_string(), + file: self.start.file, + line: self.start.line, + col: self.start.col + }); + } + } + break; } else if (exp instanceof AST_Dot) switch(exp.property) { case "toString": if (self.args.length == 0) return make_node(AST_Binary, self, { diff --git a/test/compress/issue-269.js b/test/compress/issue-269.js index 1d41dea6..a29e7541 100644 --- a/test/compress/issue-269.js +++ b/test/compress/issue-269.js @@ -64,3 +64,27 @@ strings_concat: { ); } } + +regexp: { + options = { + evaluate: true, + unsafe: true, + } + input: { + RegExp("foo"); + RegExp("bar", "ig"); + RegExp(foo); + RegExp("bar", ig); + RegExp("should", "fail"); + } + expect: { + /foo/; + /bar/ig; + RegExp(foo); + RegExp("bar", ig); + RegExp("should", "fail"); + } + expect_warnings: [ + 'WARN: Error converting RegExp("should","fail") [test/compress/issue-269.js:78,2]', + ] +} -- 2.34.1