enhance unsafe evaluate (#3564)
This commit is contained in:
@@ -2995,6 +2995,7 @@ merge(Compressor.prototype, {
|
||||
],
|
||||
};
|
||||
convert_to_predicate(static_values);
|
||||
var regexp_props = makePredicate("global ignoreCase multiline source");
|
||||
def(AST_PropAccess, function(compressor, cached, depth) {
|
||||
if (compressor.option("unsafe")) {
|
||||
var key = this.property;
|
||||
@@ -3010,9 +3011,12 @@ merge(Compressor.prototype, {
|
||||
val = global_objs[exp.name];
|
||||
} else {
|
||||
val = exp._eval(compressor, cached, depth + 1);
|
||||
if (!val || val === exp) return this;
|
||||
if (typeof val == "object" && !HOP(val, key)) return this;
|
||||
if (typeof val == "function") switch (key) {
|
||||
if (val == null || val === exp) return this;
|
||||
if (val instanceof RegExp) {
|
||||
if (!regexp_props[key]) return this;
|
||||
} else if (typeof val == "object") {
|
||||
if (!HOP(val, key)) return this;
|
||||
} else if (typeof val == "function") switch (key) {
|
||||
case "name":
|
||||
return val.node.name ? val.node.name.name : "";
|
||||
case "length":
|
||||
@@ -3060,7 +3064,7 @@ merge(Compressor.prototype, {
|
||||
val = global_objs[e.name];
|
||||
} else {
|
||||
val = e._eval(compressor, cached, depth + 1);
|
||||
if (val === e || !val) return this;
|
||||
if (val == null || val === e) return this;
|
||||
var native_fn = native_fns[val.constructor.name];
|
||||
if (!native_fn || !native_fn[key]) return this;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user