fix corner cases in pure_getters & reduce_vars (#5859)
fixes #5856 fixes #5857 fixes #5858
This commit is contained in:
@@ -1261,8 +1261,9 @@ Compressor.prototype.compress = function(node) {
|
||||
});
|
||||
def(AST_Dot, function(tw, descend) {
|
||||
descend();
|
||||
var expr = this.expression;
|
||||
if (expr instanceof AST_SymbolRef) access(tw, expr.definition());
|
||||
var node = this;
|
||||
var expr = node.expression;
|
||||
if (!node.optional && expr instanceof AST_SymbolRef) access(tw, expr.definition());
|
||||
return true;
|
||||
});
|
||||
def(AST_For, function(tw, descend, compressor) {
|
||||
@@ -1362,15 +1363,18 @@ Compressor.prototype.compress = function(node) {
|
||||
pop_scope(tw, fn);
|
||||
return true;
|
||||
});
|
||||
def(AST_Sub, function(tw) {
|
||||
def(AST_Sub, function(tw, descend) {
|
||||
var node = this;
|
||||
if (!node.optional) return;
|
||||
var expr = node.expression;
|
||||
expr.walk(tw);
|
||||
if (expr instanceof AST_SymbolRef) access(tw, expr.definition());
|
||||
push(tw, true);
|
||||
node.property.walk(tw);
|
||||
pop(tw);
|
||||
if (node.optional) {
|
||||
expr.walk(tw);
|
||||
push(tw, true);
|
||||
node.property.walk(tw);
|
||||
pop(tw);
|
||||
} else {
|
||||
descend();
|
||||
if (expr instanceof AST_SymbolRef) access(tw, expr.definition());
|
||||
}
|
||||
return true;
|
||||
});
|
||||
def(AST_Switch, function(tw, descend, compressor) {
|
||||
@@ -8020,8 +8024,14 @@ Compressor.prototype.compress = function(node) {
|
||||
prop.walk(tw);
|
||||
});
|
||||
if (node instanceof AST_Assign) {
|
||||
var right = get_rhs(node), shared = false;
|
||||
if (init && node.write_only === true && !right.has_side_effects(compressor)) {
|
||||
var fixed = sym.fixed_value();
|
||||
var right = get_rhs(node);
|
||||
var safe = fixed && fixed.is_constant();
|
||||
var shared = false;
|
||||
if (init
|
||||
&& node.write_only === true
|
||||
&& (safe || node.left === sym || right.equals(sym))
|
||||
&& !right.has_side_effects(compressor)) {
|
||||
initializations.add(node_def.id, right);
|
||||
} else {
|
||||
right.walk(tw);
|
||||
@@ -8031,11 +8041,8 @@ Compressor.prototype.compress = function(node) {
|
||||
if (!node.write_only || shared) {
|
||||
verify_safe_usage(node_def, sym, value_modified[node_def.id]);
|
||||
}
|
||||
} else {
|
||||
var fixed = sym.fixed_value();
|
||||
if (!fixed || !fixed.is_constant()) {
|
||||
verify_safe_usage(node_def, value_read[node_def.id], true);
|
||||
}
|
||||
} else if (!safe) {
|
||||
verify_safe_usage(node_def, value_read[node_def.id], true);
|
||||
}
|
||||
}
|
||||
if (track_assigns(node_def, sym) && is_lhs(sym, node) !== sym) add_assigns(node_def, sym);
|
||||
|
||||
Reference in New Issue
Block a user