fix & improve AST_TemplateString (#2410)

- resolve `semicolons:false` ambiguity with tagged literals
- allow `side_effects` to work on template literals
- traverse `AST_TemplateString` properly

fixes #2401
This commit is contained in:
Alex Lam S.L
2017-10-28 11:36:09 +08:00
committed by GitHub
parent 2848596280
commit 6ab73c7bd5
5 changed files with 87 additions and 26 deletions

View File

@@ -2230,6 +2230,10 @@ merge(Compressor.prototype, {
return expression.has_side_effects(compressor);
});
});
def(AST_TemplateSegment, return_false);
def(AST_TemplateString, function(compressor){
return any(this.segments, compressor);
});
})(function(node, func){
node.DEFMETHOD("has_side_effects", func);
});
@@ -2944,6 +2948,11 @@ merge(Compressor.prototype, {
def(AST_Expansion, function(compressor, first_in_statement){
return this.expression.drop_side_effect_free(compressor, first_in_statement);
});
def(AST_TemplateSegment, return_null);
def(AST_TemplateString, function(compressor){
var values = trim(this.segments, compressor, first_in_statement);
return values && make_sequence(this, values);
});
})(function(node, func){
node.DEFMETHOD("drop_side_effect_free", func);
});
@@ -4888,7 +4897,7 @@ merge(Compressor.prototype, {
}
self.segments = segments;
return self;
return segments.length == 1 ? make_node(AST_String, self, segments[0]) : self;
});
OPT(AST_PrefixedTemplateString, function(self, compressor){