fix corner case in booleans (#4246)

fixes #4245
This commit is contained in:
Alex Lam S.L
2020-10-26 10:53:58 +00:00
committed by GitHub
parent b2775746a7
commit 607f87c5cd
4 changed files with 47 additions and 2 deletions

View File

@@ -7598,7 +7598,9 @@ merge(Compressor.prototype, {
// typeof always returns a non-empty string, thus it's
// always true in booleans
AST_Node.warn("Boolean expression always true [{file}:{line},{col}]", self.start);
return (exp instanceof AST_SymbolRef ? make_node(AST_True, self) : make_sequence(self, [
return (exp instanceof AST_SymbolRef && all(exp.definition().orig, function(sym) {
return !(sym instanceof AST_SymbolConst || sym instanceof AST_SymbolLet);
}) ? make_node(AST_True, self) : make_sequence(self, [
exp,
make_node(AST_True, self)
])).optimize(compressor);

View File

@@ -386,7 +386,7 @@ function test_case(test) {
mangle: test.mangle
});
var actual = stdout[toplevel ? 1 : 0];
if (test.expect_stdout === true) {
if (test.expect_stdout === true || test.expect_stdout instanceof Error && test.expect_stdout.name === actual.name) {
test.expect_stdout = actual;
}
if (!sandbox.same_stdout(test.expect_stdout, actual)) {

View File

@@ -1084,3 +1084,23 @@ issue_4231: {
}
expect_stdout: "function"
}
issue_4245: {
options = {
booleans: true,
}
input: {
const a = f();
function f() {
typeof a;
}
}
expect: {
const a = f();
function f() {
a,
1;
}
}
expect_stdout: true
}

View File

@@ -893,3 +893,26 @@ issue_4231: {
expect_stdout: "function"
node_version: ">=4"
}
issue_4245: {
options = {
booleans: true,
}
input: {
"use strict";
let a = f();
function f() {
typeof a;
}
}
expect: {
"use strict";
let a = f();
function f() {
a,
1;
}
}
expect_stdout: ReferenceError("a is not defined")
node_version: ">=4"
}