@@ -990,7 +990,6 @@ merge(Compressor.prototype, {
|
|||||||
|| node instanceof AST_Debugger
|
|| node instanceof AST_Debugger
|
||||||
|| node instanceof AST_IterationStatement && !(node instanceof AST_For)
|
|| node instanceof AST_IterationStatement && !(node instanceof AST_For)
|
||||||
|| node instanceof AST_Try
|
|| node instanceof AST_Try
|
||||||
|| node instanceof AST_VarDef && node.value && side_effects && !references_in_scope(node.name.definition())
|
|
||||||
|| node instanceof AST_With
|
|| node instanceof AST_With
|
||||||
|| parent instanceof AST_For && node !== parent.init
|
|| parent instanceof AST_For && node !== parent.init
|
||||||
|| (side_effects || !replace_all)
|
|| (side_effects || !replace_all)
|
||||||
@@ -1048,9 +1047,11 @@ merge(Compressor.prototype, {
|
|||||||
|| node instanceof AST_PropAccess
|
|| node instanceof AST_PropAccess
|
||||||
&& (side_effects || node.expression.may_throw_on_access(compressor))
|
&& (side_effects || node.expression.may_throw_on_access(compressor))
|
||||||
|| node instanceof AST_SymbolRef
|
|| node instanceof AST_SymbolRef
|
||||||
&& (lvalues[node.name]
|
&& !(parent instanceof AST_Assign && parent.operator == "=" && parent.left === node)
|
||||||
|| side_effects && !references_in_scope(node.definition()))
|
&& (lvalues[node.name] || may_modify(node))
|
||||||
|| (sym = lhs_or_def(node))
|
|| node instanceof AST_VarDef && node.value
|
||||||
|
&& (node.name.name in lvalues || may_modify(node.name))
|
||||||
|
|| (sym = is_lhs(node.left, node))
|
||||||
&& (sym instanceof AST_PropAccess || sym.name in lvalues)
|
&& (sym instanceof AST_PropAccess || sym.name in lvalues)
|
||||||
|| may_throw
|
|| may_throw
|
||||||
&& (in_try ? node.has_side_effects(compressor) : side_effects_external(node))
|
&& (in_try ? node.has_side_effects(compressor) : side_effects_external(node))
|
||||||
@@ -1321,11 +1322,6 @@ merge(Compressor.prototype, {
|
|||||||
return lvalues;
|
return lvalues;
|
||||||
}
|
}
|
||||||
|
|
||||||
function lhs_or_def(node) {
|
|
||||||
if (node instanceof AST_VarDef) return node.value && node.name;
|
|
||||||
return is_lhs(node.left, node);
|
|
||||||
}
|
|
||||||
|
|
||||||
function remove_candidate(expr) {
|
function remove_candidate(expr) {
|
||||||
if (expr.name instanceof AST_SymbolFunarg) {
|
if (expr.name instanceof AST_SymbolFunarg) {
|
||||||
var index = compressor.self().argnames.indexOf(expr.name);
|
var index = compressor.self().argnames.indexOf(expr.name);
|
||||||
@@ -1359,10 +1355,12 @@ merge(Compressor.prototype, {
|
|||||||
return get_rvalue(expr).has_side_effects(compressor);
|
return get_rvalue(expr).has_side_effects(compressor);
|
||||||
}
|
}
|
||||||
|
|
||||||
function references_in_scope(def) {
|
function may_modify(sym) {
|
||||||
if (def.orig.length == 1 && def.orig[0] instanceof AST_SymbolDefun) return true;
|
if (!side_effects) return false;
|
||||||
if (def.scope !== scope) return false;
|
var def = sym.definition();
|
||||||
return def.references.every(function(ref) {
|
if (def.orig.length == 1 && def.orig[0] instanceof AST_SymbolDefun) return false;
|
||||||
|
if (def.scope !== scope) return true;
|
||||||
|
return !all(def.references, function(ref) {
|
||||||
return ref.scope === scope;
|
return ref.scope === scope;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user