diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2017-03-02 11:31:39 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-02 11:31:39 +0800 |
commit | fdc9b9413bfddc711fe6195bd4fd408ab1dfa95e (patch) | |
tree | 867fc780891c6e248a3510d9e34ac77b9914949d /lib/compress.js | |
parent | 40ceddb48a6ea8d6864667574fa9db37ccc9a6bf (diff) | |
download | tracifyjs-fdc9b9413bfddc711fe6195bd4fd408ab1dfa95e.tar.gz tracifyjs-fdc9b9413bfddc711fe6195bd4fd408ab1dfa95e.zip |
minor improvement to string optimisation (#1514)
- "" + "a" => "a"
- "" + a + "b" => a + "b"
- "a" + "" => "a" (improving on #45)
Diffstat (limited to 'lib/compress.js')
-rw-r--r-- | lib/compress.js | 29 |
1 files changed, 19 insertions, 10 deletions
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) { |