account for side-effects in comparisons of null & undefined (#2863)
This commit is contained in:
parent
fad6766a90
commit
c3a002ff97
|
|
@ -4800,6 +4800,7 @@ merge(Compressor.prototype, {
|
||||||
&& lhs.operator == self.right.operator
|
&& lhs.operator == self.right.operator
|
||||||
&& (is_undefined(lhs.left, compressor) && self.right.left instanceof AST_Null
|
&& (is_undefined(lhs.left, compressor) && self.right.left instanceof AST_Null
|
||||||
|| lhs.left instanceof AST_Null && is_undefined(self.right.left, compressor))
|
|| lhs.left instanceof AST_Null && is_undefined(self.right.left, compressor))
|
||||||
|
&& !lhs.right.has_side_effects(compressor)
|
||||||
&& lhs.right.equivalent_to(self.right.right)) {
|
&& lhs.right.equivalent_to(self.right.right)) {
|
||||||
var combined = make_node(AST_Binary, self, {
|
var combined = make_node(AST_Binary, self, {
|
||||||
operator: lhs.operator.slice(0, -1),
|
operator: lhs.operator.slice(0, -1),
|
||||||
|
|
|
||||||
|
|
@ -118,24 +118,48 @@ issue_2857_1: {
|
||||||
comparisons: true,
|
comparisons: true,
|
||||||
}
|
}
|
||||||
input: {
|
input: {
|
||||||
a === undefined || a === null;
|
function f1(a) {
|
||||||
a === undefined || a !== null;
|
a === undefined || a === null;
|
||||||
a !== undefined || a === null;
|
a === undefined || a !== null;
|
||||||
a !== undefined || a !== null;
|
a !== undefined || a === null;
|
||||||
a === undefined && a === null;
|
a !== undefined || a !== null;
|
||||||
a === undefined && a !== null;
|
a === undefined && a === null;
|
||||||
a !== undefined && a === null;
|
a === undefined && a !== null;
|
||||||
a !== undefined && a !== null;
|
a !== undefined && a === null;
|
||||||
|
a !== undefined && a !== null;
|
||||||
|
}
|
||||||
|
function f2(a) {
|
||||||
|
a === null || a === undefined;
|
||||||
|
a === null || a !== undefined;
|
||||||
|
a !== null || a === undefined;
|
||||||
|
a !== null || a !== undefined;
|
||||||
|
a === null && a === undefined;
|
||||||
|
a === null && a !== undefined;
|
||||||
|
a !== null && a === undefined;
|
||||||
|
a !== null && a !== undefined;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
null == a;
|
function f1(a) {
|
||||||
void 0 === a || null !== a;
|
null == a;
|
||||||
void 0 !== a || null === a;
|
void 0 === a || null !== a;
|
||||||
void 0 !== a || null !== a;
|
void 0 !== a || null === a;
|
||||||
void 0 === a && null === a;
|
void 0 !== a || null !== a;
|
||||||
void 0 === a && null !== a;
|
void 0 === a && null === a;
|
||||||
void 0 !== a && null === a;
|
void 0 === a && null !== a;
|
||||||
null != a;
|
void 0 !== a && null === a;
|
||||||
|
null != a;
|
||||||
|
}
|
||||||
|
function f2(a) {
|
||||||
|
null == a;
|
||||||
|
null === a || void 0 !== a;
|
||||||
|
null !== a || void 0 === a;
|
||||||
|
null !== a || void 0 !== a;
|
||||||
|
null === a && void 0 === a;
|
||||||
|
null === a && void 0 !== a;
|
||||||
|
null !== a && void 0 === a;
|
||||||
|
null != a;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -144,24 +168,28 @@ issue_2857_2: {
|
||||||
comparisons: true,
|
comparisons: true,
|
||||||
}
|
}
|
||||||
input: {
|
input: {
|
||||||
a === undefined || a === null || p;
|
function f(a, p) {
|
||||||
a === undefined || a !== null || p;
|
a === undefined || a === null || p;
|
||||||
a !== undefined || a === null || p;
|
a === undefined || a !== null || p;
|
||||||
a !== undefined || a !== null || p;
|
a !== undefined || a === null || p;
|
||||||
a === undefined && a === null || p;
|
a !== undefined || a !== null || p;
|
||||||
a === undefined && a !== null || p;
|
a === undefined && a === null || p;
|
||||||
a !== undefined && a === null || p;
|
a === undefined && a !== null || p;
|
||||||
a !== undefined && a !== null || p;
|
a !== undefined && a === null || p;
|
||||||
|
a !== undefined && a !== null || p;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
null == a || p;
|
function f(a, p) {
|
||||||
void 0 === a || null !== a || p;
|
null == a || p;
|
||||||
void 0 !== a || null === a || p;
|
void 0 === a || null !== a || p;
|
||||||
void 0 !== a || null !== a || p;
|
void 0 !== a || null === a || p;
|
||||||
void 0 === a && null === a || p;
|
void 0 !== a || null !== a || p;
|
||||||
void 0 === a && null !== a || p;
|
void 0 === a && null === a || p;
|
||||||
void 0 !== a && null === a || p;
|
void 0 === a && null !== a || p;
|
||||||
null != a || p;
|
void 0 !== a && null === a || p;
|
||||||
|
null != a || p;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -170,24 +198,28 @@ issue_2857_3: {
|
||||||
comparisons: true,
|
comparisons: true,
|
||||||
}
|
}
|
||||||
input: {
|
input: {
|
||||||
a === undefined || a === null && p;
|
function f(a, p) {
|
||||||
a === undefined || a !== null && p;
|
a === undefined || a === null && p;
|
||||||
a !== undefined || a === null && p;
|
a === undefined || a !== null && p;
|
||||||
a !== undefined || a !== null && p;
|
a !== undefined || a === null && p;
|
||||||
a === undefined && a === null && p;
|
a !== undefined || a !== null && p;
|
||||||
a === undefined && a !== null && p;
|
a === undefined && a === null && p;
|
||||||
a !== undefined && a === null && p;
|
a === undefined && a !== null && p;
|
||||||
a !== undefined && a !== null && p;
|
a !== undefined && a === null && p;
|
||||||
|
a !== undefined && a !== null && p;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
void 0 === a || null === a && p;
|
function f(a, p) {
|
||||||
void 0 === a || null !== a && p;
|
void 0 === a || null === a && p;
|
||||||
void 0 !== a || null === a && p;
|
void 0 === a || null !== a && p;
|
||||||
void 0 !== a || null !== a && p;
|
void 0 !== a || null === a && p;
|
||||||
void 0 === a && null === a && p;
|
void 0 !== a || null !== a && p;
|
||||||
void 0 === a && null !== a && p;
|
void 0 === a && null === a && p;
|
||||||
void 0 !== a && null === a && p;
|
void 0 === a && null !== a && p;
|
||||||
null != a && p;
|
void 0 !== a && null === a && p;
|
||||||
|
null != a && p;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -196,24 +228,28 @@ issue_2857_4: {
|
||||||
comparisons: true,
|
comparisons: true,
|
||||||
}
|
}
|
||||||
input: {
|
input: {
|
||||||
p || a === undefined || a === null;
|
function f(a, p) {
|
||||||
p || a === undefined || a !== null;
|
p || a === undefined || a === null;
|
||||||
p || a !== undefined || a === null;
|
p || a === undefined || a !== null;
|
||||||
p || a !== undefined || a !== null;
|
p || a !== undefined || a === null;
|
||||||
p || a === undefined && a === null;
|
p || a !== undefined || a !== null;
|
||||||
p || a === undefined && a !== null;
|
p || a === undefined && a === null;
|
||||||
p || a !== undefined && a === null;
|
p || a === undefined && a !== null;
|
||||||
p || a !== undefined && a !== null;
|
p || a !== undefined && a === null;
|
||||||
|
p || a !== undefined && a !== null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
p || null == a;
|
function f(a, p) {
|
||||||
p || void 0 === a || null !== a;
|
p || null == a;
|
||||||
p || void 0 !== a || null === a;
|
p || void 0 === a || null !== a;
|
||||||
p || void 0 !== a || null !== a;
|
p || void 0 !== a || null === a;
|
||||||
p || void 0 === a && null === a;
|
p || void 0 !== a || null !== a;
|
||||||
p || void 0 === a && null !== a;
|
p || void 0 === a && null === a;
|
||||||
p || void 0 !== a && null === a;
|
p || void 0 === a && null !== a;
|
||||||
p || null != a;
|
p || void 0 !== a && null === a;
|
||||||
|
p || null != a;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -222,23 +258,60 @@ issue_2857_5: {
|
||||||
comparisons: true,
|
comparisons: true,
|
||||||
}
|
}
|
||||||
input: {
|
input: {
|
||||||
p && a === undefined || a === null;
|
function f(a, p) {
|
||||||
p && a === undefined || a !== null;
|
p && a === undefined || a === null;
|
||||||
p && a !== undefined || a === null;
|
p && a === undefined || a !== null;
|
||||||
p && a !== undefined || a !== null;
|
p && a !== undefined || a === null;
|
||||||
p && a === undefined && a === null;
|
p && a !== undefined || a !== null;
|
||||||
p && a === undefined && a !== null;
|
p && a === undefined && a === null;
|
||||||
p && a !== undefined && a === null;
|
p && a === undefined && a !== null;
|
||||||
p && a !== undefined && a !== null;
|
p && a !== undefined && a === null;
|
||||||
|
p && a !== undefined && a !== null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
p && void 0 === a || null === a;
|
function f(a, p) {
|
||||||
p && void 0 === a || null !== a;
|
p && void 0 === a || null === a;
|
||||||
p && void 0 !== a || null === a;
|
p && void 0 === a || null !== a;
|
||||||
p && void 0 !== a || null !== a;
|
p && void 0 !== a || null === a;
|
||||||
p && void 0 === a && null === a;
|
p && void 0 !== a || null !== a;
|
||||||
p && void 0 === a && null !== a;
|
p && void 0 === a && null === a;
|
||||||
p && void 0 !== a && null === a;
|
p && void 0 === a && null !== a;
|
||||||
p && null != a;
|
p && void 0 !== a && null === a;
|
||||||
|
p && null != a;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
issue_2857_6: {
|
||||||
|
options = {
|
||||||
|
comparisons: true,
|
||||||
|
pure_getters: "strict",
|
||||||
|
reduce_vars: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
function f(a) {
|
||||||
|
if (({}).b === undefined || {}.b === null)
|
||||||
|
return a.b !== undefined && a.b !== null;
|
||||||
|
}
|
||||||
|
console.log(f({
|
||||||
|
a: [ null ],
|
||||||
|
get b() {
|
||||||
|
return this.a.shift();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
function f(a) {
|
||||||
|
if (null == {}.b)
|
||||||
|
return void 0 !== a.b && null !== a.b;
|
||||||
|
}
|
||||||
|
console.log(f({
|
||||||
|
a: [ null ],
|
||||||
|
get b() {
|
||||||
|
return this.a.shift();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
expect_stdout: "true"
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user