Skip to content

Commit

Permalink
fix corner case in collapse_vars (#3629)
Browse files Browse the repository at this point in the history
fixes #3628
  • Loading branch information
alexlamsl committed Dec 4, 2019
1 parent 04fbb1f commit 9074f05
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 2 deletions.
14 changes: 12 additions & 2 deletions lib/compress.js
Expand Up @@ -1610,7 +1610,12 @@ merge(Compressor.prototype, {
if (parent.condition !== node) return node;
return find_stop_value(parent, level + 1);
}
if (parent instanceof AST_ObjectKeyVal) return find_stop_value(scanner.parent(level + 1), level + 2);
if (parent instanceof AST_ObjectKeyVal) {
var obj = scanner.parent(level + 1);
return all(obj.properties, function(prop) {
return prop instanceof AST_ObjectKeyVal;
}) ? find_stop_value(obj, level + 2) : obj;
}
if (parent instanceof AST_PropAccess) return find_stop_value(parent, level + 1);
if (parent instanceof AST_Sequence) {
return (parent.tail_node() === node ? find_stop_value : find_stop_unused)(parent, level + 1);
Expand Down Expand Up @@ -1651,7 +1656,12 @@ merge(Compressor.prototype, {
if (parent instanceof AST_Exit) return find_stop_unused(parent, level + 1);
if (parent instanceof AST_If) return find_stop_unused(parent, level + 1);
if (parent instanceof AST_IterationStatement) return node;
if (parent instanceof AST_ObjectKeyVal) return find_stop_unused(scanner.parent(level + 1), level + 2);
if (parent instanceof AST_ObjectKeyVal) {
var obj = scanner.parent(level + 1);
return all(obj.properties, function(prop) {
return prop instanceof AST_ObjectKeyVal;
}) ? find_stop_unused(obj, level + 2) : obj;
}
if (parent instanceof AST_PropAccess) {
var exp = parent.expression;
if (exp === node) return find_stop_unused(parent, level + 1);
Expand Down
54 changes: 54 additions & 0 deletions test/compress/collapse_vars.js
Expand Up @@ -7345,3 +7345,57 @@ issue_3626_2: {
}
expect_stdout: "foo 42 null"
}

issue_3628_1: {
options = {
collapse_vars: true,
}
input: {
var a = "bar", b;
({
get p() {
a = "foo";
},
q: b = a
}).p;
console.log(a, b);
}
expect: {
var a = "bar", b;
({
get p() {
a = "foo";
},
q: b = a
}).p;
console.log(a, b);
}
expect_stdout: "foo bar"
}

issue_3628_2: {
options = {
collapse_vars: true,
}
input: {
var a = "bar", b;
({
get p() {
a = "foo";
},
q: (b = a, 42)
}).p;
console.log(a, b);
}
expect: {
var a = "bar", b;
({
get p() {
a = "foo";
},
q: (b = a, 42)
}).p;
console.log(a, b);
}
expect_stdout: "foo bar"
}

0 comments on commit 9074f05

Please sign in to comment.