&& self.left.operator == "+"
&& self.left.left instanceof AST_String
&& self.left.left.value == ""
- && self.right.is_string(compressor)) {
+ && self.right.is_string(compressor)
+ && (self.left.right.is_constant() || !self.right.has_side_effects(compressor))) {
self.left = self.left.right;
return self.optimize(compressor);
}
}).transform(compressor),
right: exprs[exprs.length - 1],
}).optimize(compressor);
- if (strs[0] == "") return make_node(AST_Binary, self, {
- operator: "+",
- left: exprs[0],
- right: make_node(AST_Template, self, {
- expressions: exprs.slice(1),
- strings: strs.slice(1),
- tag: tag,
- }).transform(compressor),
- }).optimize(compressor);
+ if (strs[0] == "") {
+ var left = make_node(AST_Binary, self, {
+ operator: "+",
+ left: make_node(AST_String, self, { value: "" }),
+ right: exprs[0],
+ });
+ for (var i = 1; strs[i] == "" && i < exprs.length; i++) {
+ left = make_node(AST_Binary, self, {
+ operator: "+",
+ left: left,
+ right: exprs[i],
+ });
+ }
+ return best_of(compressor, self, make_node(AST_Binary, self, {
+ operator: "+",
+ left: left.transform(compressor),
+ right: make_node(AST_Template, self, {
+ expressions: exprs.slice(i),
+ strings: strs.slice(i),
+ tag: tag,
+ }).transform(compressor),
+ }).optimize(compressor));
+ }
}
self.expressions = exprs;
self.strings = strs;