enhance collapse_vars (#3616)
This commit is contained in:
@@ -1147,7 +1147,7 @@ merge(Compressor.prototype, {
|
||||
&& (scan_lhs && lhs.equivalent_to(node)
|
||||
|| scan_rhs && (hit_rhs = scan_rhs(node, this)))) {
|
||||
if (stop_if_hit && (hit_rhs || !lhs_local || !replace_all)) {
|
||||
abort = true;
|
||||
if (!hit_rhs || !value_def) abort = true;
|
||||
return node;
|
||||
}
|
||||
if (is_lhs(node, parent)) {
|
||||
@@ -1541,14 +1541,27 @@ merge(Compressor.prototype, {
|
||||
function find_stop(node, level) {
|
||||
var parent = scanner.parent(level);
|
||||
if (parent instanceof AST_Array) return value_def ? find_stop(parent, level + 1) : node;
|
||||
if (parent instanceof AST_Assign) return node;
|
||||
if (parent instanceof AST_Binary) {
|
||||
if (!value_def || parent.left !== node) return node;
|
||||
if (parent instanceof AST_Assign) {
|
||||
if (!value_def) return node;
|
||||
if (lhs.equivalent_to(parent.left)) return node;
|
||||
if (get_rvalue(candidate).equivalent_to(parent.left)) return node;
|
||||
return find_stop(parent, level + 1);
|
||||
}
|
||||
if (parent instanceof AST_Call) return node;
|
||||
if (parent instanceof AST_Binary) {
|
||||
if (!value_def) return node;
|
||||
if (lazy_op[parent.operator] && parent.left !== node) {
|
||||
var grandparent = scanner.parent(level + 1);
|
||||
if (!(grandparent instanceof AST_Binary)) return node;
|
||||
if (grandparent.operator != parent.operator) return node;
|
||||
}
|
||||
return find_stop(parent, level + 1);
|
||||
}
|
||||
if (parent instanceof AST_Call) return value_def ? parent : node;
|
||||
if (parent instanceof AST_Case) return node;
|
||||
if (parent instanceof AST_Conditional) return node;
|
||||
if (parent instanceof AST_Conditional) {
|
||||
if (!value_def || parent.condition !== node) return node;
|
||||
return find_stop(parent, level + 1);
|
||||
}
|
||||
if (parent instanceof AST_Definitions) return find_stop_unused(parent, level + 1);
|
||||
if (parent instanceof AST_Exit) return node;
|
||||
if (parent instanceof AST_If) return node;
|
||||
@@ -1562,7 +1575,10 @@ merge(Compressor.prototype, {
|
||||
}
|
||||
if (parent instanceof AST_SimpleStatement) return find_stop_unused(parent, level + 1);
|
||||
if (parent instanceof AST_Switch) return node;
|
||||
if (parent instanceof AST_Unary) return node;
|
||||
if (parent instanceof AST_Unary) {
|
||||
if (parent.operator == "delete") return node;
|
||||
return value_def ? find_stop(parent, level + 1) : node;
|
||||
}
|
||||
if (parent instanceof AST_VarDef) return node;
|
||||
return null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user