introduce unsafe_proto

- `Array.prototype.slice` => `[].slice`

closes #1491
This commit is contained in:
alexlamsl
2017-02-18 19:34:54 +08:00
parent ac0b61ed6e
commit ec64acd2c8
3 changed files with 42 additions and 0 deletions

View File

@@ -54,6 +54,7 @@ function Compressor(options, false_by_default) {
drop_debugger : !false_by_default,
unsafe : false,
unsafe_comps : false,
unsafe_proto : false,
conditionals : !false_by_default,
comparisons : !false_by_default,
evaluate : !false_by_default,
@@ -3148,6 +3149,28 @@ merge(Compressor.prototype, {
})
}).optimize(compressor);
}
if (compressor.option("unsafe_proto")
&& self.expression instanceof AST_Dot
&& self.expression.property == "prototype") {
var exp = self.expression.expression;
if (exp instanceof AST_SymbolRef && exp.undeclared()) switch (exp.name) {
case "Array":
self.expression = make_node(AST_Array, self.expression, {
elements: []
});
break;
case "Object":
self.expression = make_node(AST_Object, self.expression, {
properties: []
});
break;
case "String":
self.expression = make_node(AST_String, self.expression, {
value: ""
});
break;
}
}
return self.evaluate(compressor)[0];
});