@@ -1777,6 +1777,7 @@ merge(Compressor.prototype, {
|
|||||||
}
|
}
|
||||||
return node;
|
return node;
|
||||||
} else if (value_def) {
|
} else if (value_def) {
|
||||||
|
if (stop_if_hit && assign_pos == 0) assign_pos = remaining - replaced;
|
||||||
if (!hit_rhs) replaced++;
|
if (!hit_rhs) replaced++;
|
||||||
return node;
|
return node;
|
||||||
} else {
|
} else {
|
||||||
@@ -1904,14 +1905,14 @@ merge(Compressor.prototype, {
|
|||||||
if (is_lhs(node, multi_replacer.parent())) return node;
|
if (is_lhs(node, multi_replacer.parent())) return node;
|
||||||
var ref = rvalue.clone();
|
var ref = rvalue.clone();
|
||||||
value_def.references.push(ref);
|
value_def.references.push(ref);
|
||||||
if (abort && candidate instanceof AST_Assign && remaining_refs(def) > 1) {
|
if (replaced == assign_pos) {
|
||||||
|
abort = true;
|
||||||
return make_node(AST_Assign, candidate, {
|
return make_node(AST_Assign, candidate, {
|
||||||
operator: "=",
|
operator: "=",
|
||||||
left: node,
|
left: node,
|
||||||
right: ref,
|
right: ref,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
ref.fixed = false;
|
|
||||||
def.replaced++;
|
def.replaced++;
|
||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
@@ -1931,6 +1932,8 @@ merge(Compressor.prototype, {
|
|||||||
hit_stack = candidates.pop();
|
hit_stack = candidates.pop();
|
||||||
var hit_index = 0;
|
var hit_index = 0;
|
||||||
var candidate = hit_stack[hit_stack.length - 1];
|
var candidate = hit_stack[hit_stack.length - 1];
|
||||||
|
var assign_pos = -1;
|
||||||
|
var assign_used = false;
|
||||||
var remaining;
|
var remaining;
|
||||||
var value_def = null;
|
var value_def = null;
|
||||||
var stop_after = null;
|
var stop_after = null;
|
||||||
@@ -1962,7 +1965,6 @@ merge(Compressor.prototype, {
|
|||||||
var hit = funarg;
|
var hit = funarg;
|
||||||
var abort = false;
|
var abort = false;
|
||||||
var replaced = 0;
|
var replaced = 0;
|
||||||
var assign_used = false;
|
|
||||||
var can_replace = !args || !hit;
|
var can_replace = !args || !hit;
|
||||||
if (!can_replace) {
|
if (!can_replace) {
|
||||||
for (var j = candidate.arg_index + 1; !abort && j < args.length; j++) {
|
for (var j = candidate.arg_index + 1; !abort && j < args.length; j++) {
|
||||||
@@ -2621,9 +2623,15 @@ merge(Compressor.prototype, {
|
|||||||
if (scope.uses_arguments && is_funarg(def)) return lhs;
|
if (scope.uses_arguments && is_funarg(def)) return lhs;
|
||||||
if (compressor.exposed(def)) return lhs;
|
if (compressor.exposed(def)) return lhs;
|
||||||
remaining = remaining_refs(def);
|
remaining = remaining_refs(def);
|
||||||
if (def.fixed && lhs.fixed) remaining = Math.min(remaining, def.references.filter(function(ref) {
|
if (def.fixed && lhs.fixed) {
|
||||||
return ref.fixed === lhs.fixed;
|
var matches = def.references.filter(function(ref) {
|
||||||
}).length - 1);
|
return ref.fixed === lhs.fixed;
|
||||||
|
}).length - 1;
|
||||||
|
if (matches < remaining) {
|
||||||
|
remaining = matches;
|
||||||
|
assign_pos = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
mangleable_var(expr.right);
|
mangleable_var(expr.right);
|
||||||
return lhs;
|
return lhs;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9049,7 +9049,7 @@ issue_4874: {
|
|||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
var a;
|
var a;
|
||||||
a = null;
|
null;
|
||||||
(function(b) {
|
(function(b) {
|
||||||
for (var c in a && a[console.log("PASS")])
|
for (var c in a && a[console.log("PASS")])
|
||||||
console;
|
console;
|
||||||
@@ -9125,8 +9125,29 @@ issue_4908: {
|
|||||||
expect: {
|
expect: {
|
||||||
var a = 0, b;
|
var a = 0, b;
|
||||||
console || a++;
|
console || a++;
|
||||||
var c = d = a, d = [ d && d, d += 42 ];
|
var c = a, d = [ (d = a) && d, d += 42 ];
|
||||||
console.log(d[1]);
|
console.log(d[1]);
|
||||||
}
|
}
|
||||||
expect_stdout: "42"
|
expect_stdout: "42"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
issue_4910: {
|
||||||
|
options = {
|
||||||
|
collapse_vars: true,
|
||||||
|
reduce_vars: true,
|
||||||
|
toplevel: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var a = "foo", b;
|
||||||
|
var c = b = a;
|
||||||
|
1 && c[a = "bar"];
|
||||||
|
console.log(a, b);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var a = "foo", b;
|
||||||
|
var c = b = a;
|
||||||
|
1 && b[a = "bar"];
|
||||||
|
console.log(a, b);
|
||||||
|
}
|
||||||
|
expect_stdout: "bar foo"
|
||||||
|
}
|
||||||
|
|||||||
@@ -6107,7 +6107,7 @@ reduce_cross_reference_2: {
|
|||||||
reduce_cross_reference_2_toplevel: {
|
reduce_cross_reference_2_toplevel: {
|
||||||
options = {
|
options = {
|
||||||
collapse_vars: true,
|
collapse_vars: true,
|
||||||
passes: 3,
|
passes: 2,
|
||||||
pure_getters: "strict",
|
pure_getters: "strict",
|
||||||
reduce_vars: true,
|
reduce_vars: true,
|
||||||
sequences: true,
|
sequences: true,
|
||||||
@@ -6150,7 +6150,7 @@ reduce_cross_reference_3: {
|
|||||||
reduce_cross_reference_3_toplevel: {
|
reduce_cross_reference_3_toplevel: {
|
||||||
options = {
|
options = {
|
||||||
collapse_vars: true,
|
collapse_vars: true,
|
||||||
passes: 3,
|
passes: 2,
|
||||||
pure_getters: "strict",
|
pure_getters: "strict",
|
||||||
reduce_vars: true,
|
reduce_vars: true,
|
||||||
sequences: true,
|
sequences: true,
|
||||||
|
|||||||
Reference in New Issue
Block a user