Skip to content

Commit 1e9b576

Browse files
authored
fix corner case in evaluate (#3559)
fixes #3558
1 parent 3797458 commit 1e9b576

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

lib/compress.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2862,10 +2862,10 @@ merge(Compressor.prototype, {
28622862
case "+": return +v;
28632863
case "++":
28642864
case "--":
2865-
if (e instanceof AST_SymbolRef) {
2866-
var refs = e.definition().references;
2867-
if (refs[refs.length - 1] === e) return v;
2868-
}
2865+
if (!(e instanceof AST_SymbolRef)) return this;
2866+
var refs = e.definition().references;
2867+
if (refs[refs.length - 1] !== e) return this;
2868+
return HOP(e, "_eval") ? +(this.operator[0] + 1) + +v : v;
28692869
}
28702870
return this;
28712871
});

test/compress/evaluate.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1838,3 +1838,24 @@ recursive_function_2: {
18381838
}
18391839
expect_stdout: "120"
18401840
}
1841+
1842+
issue_3558: {
1843+
options = {
1844+
evaluate: true,
1845+
reduce_vars: true,
1846+
toplevel: true,
1847+
}
1848+
input: {
1849+
function f(a) {
1850+
return 1 + --a;
1851+
}
1852+
console.log(f(true), f(false));
1853+
}
1854+
expect: {
1855+
function f(a) {
1856+
return 1 + --a;
1857+
}
1858+
console.log(1, 0);
1859+
}
1860+
expect_stdout: "1 0"
1861+
}

0 commit comments

Comments
 (0)