enable unsafe for test/ufuzz.js (#2819)

- introduce `unsafe_undefined`
- safer `.toString()` compression

Miscellaneous
- rename `unsafe_Function`
This commit is contained in:
Alex Lam S.L
2018-01-19 23:47:42 +08:00
committed by GitHub
parent 3e7873217c
commit 069df27bf1
7 changed files with 28 additions and 18 deletions

View File

@@ -84,10 +84,11 @@ function Compressor(options, false_by_default) {
typeofs : !false_by_default,
unsafe : false,
unsafe_comps : false,
unsafe_Func : false,
unsafe_Function: false,
unsafe_math : false,
unsafe_proto : false,
unsafe_regexp : false,
unsafe_undefined: false,
unused : !false_by_default,
warnings : false,
}, true);
@@ -4100,11 +4101,13 @@ merge(Compressor.prototype, {
break;
} else if (exp instanceof AST_Dot) switch(exp.property) {
case "toString":
if (self.args.length == 0) return make_node(AST_Binary, self, {
left: make_node(AST_String, self, { value: "" }),
operator: "+",
right: exp.expression
}).optimize(compressor);
if (self.args.length == 0 && !exp.expression.may_throw_on_access(compressor)) {
return make_node(AST_Binary, self, {
left: make_node(AST_String, self, { value: "" }),
operator: "+",
right: exp.expression
}).optimize(compressor);
}
break;
case "join":
if (exp.expression instanceof AST_Array) EXIT: {
@@ -4212,7 +4215,7 @@ merge(Compressor.prototype, {
break;
}
}
if (compressor.option("unsafe_Func")
if (compressor.option("unsafe_Function")
&& is_undeclared_ref(exp)
&& exp.name == "Function") {
// new Function() => function(){}
@@ -5220,7 +5223,7 @@ merge(Compressor.prototype, {
}
OPT(AST_Undefined, function(self, compressor){
if (compressor.option("unsafe")) {
if (compressor.option("unsafe_undefined")) {
var undef = find_variable(compressor, "undefined");
if (undef) {
var ref = make_node(AST_SymbolRef, self, {