Evaluate [...].join() if possible: minor bugfix

Follow-up to 78e98d2.
This commit is contained in:
Dan Wolff
2013-09-20 06:24:25 +02:00
committed by Mihai Bazon
parent 78e98d2611
commit e8158279ff
2 changed files with 5 additions and 4 deletions

View File

@@ -655,6 +655,8 @@ merge(Compressor.prototype, {
throw def; throw def;
}); });
function ev(node, compressor) { function ev(node, compressor) {
if (!compressor) throw new Error("Compressor must be passed");
return node._eval(compressor); return node._eval(compressor);
}; };
def(AST_Node, function(){ def(AST_Node, function(){
@@ -700,9 +702,6 @@ merge(Compressor.prototype, {
case "+" : case "+" :
// handle concatenating strings even if the left part cannot // handle concatenating strings even if the left part cannot
// be evaluated, e.g. (variable + "str") + "str" // be evaluated, e.g. (variable + "str") + "str"
if (!(c instanceof Compressor)) {
throw new Error("Compressor must be passed!!");
}
if (left instanceof AST_Binary && left.operator == "+" && left.is_string(c)) { if (left instanceof AST_Binary && left.operator == "+" && left.is_string(c)) {
return make_node(AST_Binary, this, { return make_node(AST_Binary, this, {
operator: "+", operator: "+",
@@ -754,7 +753,7 @@ merge(Compressor.prototype, {
var x = this.expression.expression.elements.map(function(el){ var x = this.expression.expression.elements.map(function(el){
return ev(el, compressor); return ev(el, compressor);
}); });
return x.join(ev(this.args[0])); return x.join(ev(this.args[0], compressor));
} }
} }
throw def; throw def;

View File

@@ -23,11 +23,13 @@ constant_join: {
var b = [ "foo", 1, 2, 3, "bar" ].join(""); var b = [ "foo", 1, 2, 3, "bar" ].join("");
var c = [ boo(), "foo", 1, 2, 3, "bar", bar() ].join(""); var c = [ boo(), "foo", 1, 2, 3, "bar", bar() ].join("");
var d = [ "foo", 1 + 2 + "bar", "baz" ].join("-"); var d = [ "foo", 1 + 2 + "bar", "baz" ].join("-");
var e = [].join(foo + bar);
} }
expect: { expect: {
var a = "foobarbaz"; var a = "foobarbaz";
var b = "foo123bar"; var b = "foo123bar";
var c = [ boo(), "foo", 1, 2, 3, "bar", bar() ].join(""); // we could still shorten this one, but oh well. var c = [ boo(), "foo", 1, 2, 3, "bar", bar() ].join(""); // we could still shorten this one, but oh well.
var d = "foo-3bar-baz"; var d = "foo-3bar-baz";
var e = [].join(foo + bar);
} }
} }