@@ -1018,6 +1018,13 @@ merge(Compressor.prototype, {
|
||||
return sym instanceof AST_SymbolLambda && def.scope.name === sym;
|
||||
});
|
||||
|
||||
function find_scope(compressor) {
|
||||
var level = 0, node;
|
||||
while (node = compressor.parent(level++)) {
|
||||
if (node.variables) return node;
|
||||
}
|
||||
}
|
||||
|
||||
function is_lhs_read_only(lhs, compressor) {
|
||||
if (lhs instanceof AST_This) return true;
|
||||
if (lhs instanceof AST_SymbolRef) {
|
||||
@@ -6885,7 +6892,7 @@ merge(Compressor.prototype, {
|
||||
&& !fn.pinned()
|
||||
&& !(fn.name && fn instanceof AST_Function)
|
||||
&& (exp === fn || !recursive_ref(compressor, def = exp.definition())
|
||||
&& fn.is_constant_expression(compressor.find_parent(AST_BlockScope)))
|
||||
&& fn.is_constant_expression(find_scope(compressor)))
|
||||
&& (value = can_flatten_body(stat))
|
||||
&& !fn.contains_this()) {
|
||||
var replacing = exp === fn || compressor.option("unused") && def.references.length - def.replaced == 1;
|
||||
@@ -8303,9 +8310,16 @@ merge(Compressor.prototype, {
|
||||
return lhs instanceof AST_SymbolRef || lhs.TYPE === self.TYPE;
|
||||
}
|
||||
|
||||
function find_variable(compressor, name) {
|
||||
var level = 0, node;
|
||||
while (node = compressor.parent(level++)) {
|
||||
if (node.variables) return node.find_variable(name);
|
||||
}
|
||||
}
|
||||
|
||||
OPT(AST_Undefined, function(self, compressor) {
|
||||
if (compressor.option("unsafe_undefined")) {
|
||||
var undef = compressor.find_parent(AST_BlockScope).find_variable("undefined");
|
||||
var undef = find_scope(compressor).find_variable("undefined");
|
||||
if (undef) {
|
||||
var ref = make_node(AST_SymbolRef, self, {
|
||||
name : "undefined",
|
||||
@@ -8331,7 +8345,7 @@ merge(Compressor.prototype, {
|
||||
if (lhs && is_atomic(lhs, self)) return self;
|
||||
if (compressor.option("keep_infinity")
|
||||
&& !(lhs && !is_atomic(lhs, self))
|
||||
&& !compressor.find_parent(AST_BlockScope).find_variable("Infinity"))
|
||||
&& !find_scope(compressor).find_variable("Infinity"))
|
||||
return self;
|
||||
return make_node(AST_Binary, self, {
|
||||
operator: "/",
|
||||
@@ -8346,8 +8360,7 @@ merge(Compressor.prototype, {
|
||||
|
||||
OPT(AST_NaN, function(self, compressor) {
|
||||
var lhs = is_lhs(compressor.self(), compressor.parent());
|
||||
if (lhs && !is_atomic(lhs, self)
|
||||
|| compressor.find_parent(AST_BlockScope).find_variable("NaN")) {
|
||||
if (lhs && !is_atomic(lhs, self) || find_scope(compressor).find_variable("NaN")) {
|
||||
return make_node(AST_Binary, self, {
|
||||
operator: "/",
|
||||
left: make_node(AST_Number, self, {
|
||||
|
||||
Reference in New Issue
Block a user