enhance unsafe evaluate (#2037)

This commit is contained in:
Alex Lam S.L
2017-06-01 00:56:28 +08:00
committed by GitHub
parent f71e8fd948
commit 17e73121fa
2 changed files with 53 additions and 0 deletions

View File

@@ -1665,6 +1665,26 @@ merge(Compressor.prototype, {
}
throw def;
});
def(AST_Call, function(compressor){
var exp = this.expression;
if (compressor.option("unsafe") && exp instanceof AST_PropAccess) {
var key = exp.property;
if (key instanceof AST_Node) {
key = ev(key, compressor);
}
var val = ev(exp.expression, compressor);
var fn = val[key];
if (typeof fn == "function") {
return fn.apply(val, this.args.map(function(arg) {
return ev(arg, compressor);
}));
}
}
throw def;
});
def(AST_New, function(compressor){
throw def;
});
})(function(node, func){
node.DEFMETHOD("_eval", func);
});
@@ -3144,6 +3164,11 @@ merge(Compressor.prototype, {
&& is_iife_call(self)) {
return self.negate(compressor, true);
}
var ev = self.evaluate(compressor);
if (ev !== self) {
ev = make_node_from_constant(ev, self).optimize(compressor);
return best_of(compressor, ev, self);
}
return self;
});