introduce unsafe_proto
- `Array.prototype.slice` => `[].slice` closes #1491
This commit is contained in:
@@ -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];
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user