@@ -703,6 +703,7 @@ merge(Compressor.prototype, {
|
||||
if (depth > 1 && !(value && value.is_constant_expression(scope))) depth = 1;
|
||||
if (!d.escaped.depth || d.escaped.depth > depth) d.escaped.depth = depth;
|
||||
if (d.scope.resolve() !== scope.resolve()) d.escaped.cross_scope = true;
|
||||
if (d.fixed) d.fixed.escaped = d.escaped;
|
||||
return;
|
||||
} else if (value_in_use(node, parent)) {
|
||||
mark_escaped(tw, d, scope, parent, parent, level + 1, depth);
|
||||
@@ -720,6 +721,7 @@ merge(Compressor.prototype, {
|
||||
if (parent instanceof AST_SimpleStatement) return;
|
||||
if (parent instanceof AST_Unary && !unary_side_effects[parent.operator]) return;
|
||||
d.direct_access = true;
|
||||
if (d.fixed) d.fixed.direct_access = true;
|
||||
}
|
||||
|
||||
function mark_assignment_to_arguments(node) {
|
||||
@@ -1000,9 +1002,9 @@ merge(Compressor.prototype, {
|
||||
d.single_use = false;
|
||||
}
|
||||
tw.loop_ids[d.id] = tw.in_loop;
|
||||
mark_escaped(tw, d, sym.scope, node, right, 0, 1);
|
||||
sym.fixed = d.fixed = fixed;
|
||||
sym.fixed.assigns = [ node ];
|
||||
mark_escaped(tw, d, sym.scope, node, right, 0, 1);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -7678,6 +7680,7 @@ merge(Compressor.prototype, {
|
||||
right: prop.value,
|
||||
}));
|
||||
});
|
||||
defs.value = node.right;
|
||||
defs_by_id[node.left.definition().id] = defs;
|
||||
self.body.splice(self.body.indexOf(this.stack[1]) + 1, 0, make_node(AST_Var, node, {
|
||||
definitions: decls,
|
||||
@@ -7690,12 +7693,16 @@ merge(Compressor.prototype, {
|
||||
descend(node, this);
|
||||
var defs = new Dictionary();
|
||||
var var_defs = [];
|
||||
var decl = node.clone();
|
||||
decl.value = node.name instanceof AST_SymbolConst ? make_node(AST_Number, node, { value: 0 }) : null;
|
||||
var_defs.push(decl);
|
||||
node.value.properties.forEach(function(prop) {
|
||||
var_defs.push(make_node(AST_VarDef, node, {
|
||||
name: make_sym(node.name.CTOR, node.name, prop.key),
|
||||
value: prop.value,
|
||||
}));
|
||||
});
|
||||
defs.value = node.value;
|
||||
defs_by_id[node.name.definition().id] = defs;
|
||||
return List.splice(var_defs);
|
||||
}
|
||||
@@ -7711,6 +7718,7 @@ merge(Compressor.prototype, {
|
||||
if (!(node.expression instanceof AST_SymbolRef)) return;
|
||||
var defs = defs_by_id[node.expression.definition().id];
|
||||
if (!defs) return;
|
||||
if (node.expression.fixed_value() !== defs.value) return;
|
||||
var def = defs.get(node.get_property());
|
||||
var sym = make_node(AST_SymbolRef, node, {
|
||||
name: def.name,
|
||||
@@ -7721,7 +7729,9 @@ merge(Compressor.prototype, {
|
||||
return sym;
|
||||
}
|
||||
if (node instanceof AST_SymbolRef) {
|
||||
if (!(node.definition().id in defs_by_id)) return;
|
||||
var defs = defs_by_id[node.definition().id];
|
||||
if (!defs) return;
|
||||
if (node.fixed_value() !== defs.value) return;
|
||||
return make_node(AST_Object, node, { properties: [] });
|
||||
}
|
||||
}));
|
||||
@@ -7730,18 +7740,16 @@ merge(Compressor.prototype, {
|
||||
if (!(sym instanceof AST_Symbol)) return;
|
||||
var def = sym.definition();
|
||||
if (def.assignments != count) return;
|
||||
if (def.direct_access) return;
|
||||
if (def.escaped.depth == 1) return;
|
||||
if (def.references.length - def.replaced == count) return;
|
||||
if (def.single_use) return;
|
||||
if (top_retain(def)) return;
|
||||
if (sym.fixed_value() !== right) return;
|
||||
var fixed = sym.fixed || def.fixed;
|
||||
if (fixed.direct_access) return;
|
||||
if (fixed.escaped && fixed.escaped.depth == 1) return;
|
||||
return right instanceof AST_Object
|
||||
&& right.properties.length > 0
|
||||
&& all(right.properties, can_hoist_property)
|
||||
&& all(def.references, function(ref) {
|
||||
return ref.fixed_value() === right;
|
||||
})
|
||||
&& can_drop_symbol(sym, compressor);
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user