From fdc9b9413bfddc711fe6195bd4fd408ab1dfa95e Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Thu, 2 Mar 2017 11:31:39 +0800 Subject: minor improvement to string optimisation (#1514) - "" + "a" => "a" - "" + a + "b" => a + "b" - "a" + "" => "a" (improving on #45) --- lib/compress.js | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) (limited to 'lib/compress.js') diff --git a/lib/compress.js b/lib/compress.js index 24550973..1d4e719a 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -1054,12 +1054,6 @@ merge(Compressor.prototype, { def(AST_Conditional, function(compressor){ return this.consequent.is_string(compressor) && this.alternative.is_string(compressor); }); - def(AST_Call, function(compressor){ - return compressor.option("unsafe") - && this.expression instanceof AST_SymbolRef - && this.expression.name == "String" - && this.expression.undeclared(); - }); })(function(node, func){ node.DEFMETHOD("is_string", func); }); @@ -2985,10 +2979,25 @@ merge(Compressor.prototype, { } } } - if (self.operator == "+" && self.right instanceof AST_String - && self.right.getValue() === "" && self.left instanceof AST_Binary - && self.left.operator == "+" && self.left.is_string(compressor)) { - return self.left; + if (self.operator == "+") { + if (self.right instanceof AST_String + && self.right.getValue() == "" + && self.left.is_string(compressor)) { + return self.left; + } + if (self.left instanceof AST_String + && self.left.getValue() == "" + && self.right.is_string(compressor)) { + return self.right; + } + if (self.left instanceof AST_Binary + && self.left.operator == "+" + && self.left.left instanceof AST_String + && self.left.left.getValue() == "" + && self.right.is_string(compressor)) { + self.left = self.left.right; + return self.transform(compressor); + } } if (compressor.option("evaluate")) { switch (self.operator) { -- cgit v1.2.3