20faaa5d94
Change-Id: Ib18f554c1076f27a3f7c0df5a36410da41a1f467 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148784 Reviewed-by: Paul Berry <paulberry@google.com> Reviewed-by: Sigmund Cherem <sigmund@google.com>
435 lines
12 KiB
Dart
435 lines
12 KiB
Dart
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
// @dart = 2.7
|
|
|
|
/*member: main:[null]*/
|
|
main() {
|
|
promotedIfThen();
|
|
promotedIfThenElse();
|
|
promotedNotIfThenElse();
|
|
promotedAndIfThen();
|
|
promotedAndIfThenElse();
|
|
promotedNotAndIfThenElse();
|
|
promotedOrIfThen();
|
|
promotedOrIfThenElse();
|
|
promotedNotOrIfThenElse();
|
|
promotedNotNotIfThen();
|
|
promotedParenNotIfThenElse();
|
|
|
|
nullIfThen();
|
|
nullIfThenElse();
|
|
notNullIfThen();
|
|
notNullIfThenElse();
|
|
nullAndIfThen();
|
|
nullAndIfThenElse();
|
|
notNullAndIfThen();
|
|
notNullAndIfThenElse();
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Test if-then statement with is-test
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*member: Class1.:[exact=Class1]*/
|
|
class Class1 {}
|
|
|
|
/*member: _promotedIfThen:[null]*/
|
|
_promotedIfThen(/*Union([exact=Class1], [exact=JSUInt31])*/ o) {
|
|
if (o is Class1) {
|
|
o. /*invoke: [exact=Class1]*/ toString();
|
|
}
|
|
}
|
|
|
|
/*member: promotedIfThen:[null]*/
|
|
promotedIfThen() {
|
|
_promotedIfThen(0);
|
|
_promotedIfThen(new Class1());
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Test if-then-else statement with is-test
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*member: Class2.:[exact=Class2]*/
|
|
class Class2 {}
|
|
|
|
/*member: _promotedIfThenElse:[null]*/
|
|
_promotedIfThenElse(/*Union([exact=Class2], [exact=JSUInt31])*/ o) {
|
|
if (o is Class2) {
|
|
o. /*invoke: [exact=Class2]*/ toString();
|
|
} else {
|
|
// TODO(johnniwinther): Use negative type knowledge to show that the
|
|
// receiver must be [exact=JSUInt31].
|
|
o. /*invoke: Union([exact=Class2], [exact=JSUInt31])*/ toString();
|
|
}
|
|
}
|
|
|
|
/*member: promotedIfThenElse:[null]*/
|
|
promotedIfThenElse() {
|
|
_promotedIfThenElse(0);
|
|
_promotedIfThenElse(new Class2());
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Test if-then-else statement with negated is-test
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*member: Class3.:[exact=Class3]*/
|
|
class Class3 {}
|
|
|
|
/*member: _promotedNotIfThenElse:[null]*/
|
|
_promotedNotIfThenElse(/*Union([exact=Class3], [exact=JSUInt31])*/ o) {
|
|
if (o is! Class3) {
|
|
o. /*invoke: Union([exact=Class3], [exact=JSUInt31])*/ toString();
|
|
} else {
|
|
o. /*invoke: [exact=Class3]*/ toString();
|
|
}
|
|
}
|
|
|
|
/*member: promotedNotIfThenElse:[null]*/
|
|
promotedNotIfThenElse() {
|
|
_promotedNotIfThenElse(0);
|
|
_promotedNotIfThenElse(new Class3());
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Test if-then statement with is-test in &&
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*member: Class4.:[exact=Class4]*/
|
|
class Class4 {}
|
|
|
|
/*member: _promotedAndIfThen:[null]*/
|
|
_promotedAndIfThen(
|
|
/*Union([exact=Class4], [exact=JSUInt31])*/ o,
|
|
/*[exact=JSBool]*/ c) {
|
|
if (o is Class4 && c) {
|
|
o. /*invoke: [exact=Class4]*/ toString();
|
|
}
|
|
}
|
|
|
|
/*member: promotedAndIfThen:[null]*/
|
|
promotedAndIfThen() {
|
|
_promotedAndIfThen(0, true);
|
|
_promotedAndIfThen(new Class4(), false);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Test if-then-else statement with is-test in &&
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*member: Class5.:[exact=Class5]*/
|
|
class Class5 {}
|
|
|
|
/*member: _promotedAndIfThenElse:[null]*/
|
|
_promotedAndIfThenElse(
|
|
/*Union([exact=Class5], [exact=JSUInt31])*/ o,
|
|
/*[exact=JSBool]*/ c) {
|
|
if (o is Class5 && c) {
|
|
o. /*invoke: [exact=Class5]*/ toString();
|
|
} else {
|
|
// TODO(johnniwinther): Use negative type knowledge to show that the
|
|
// receiver must be [exact=JSUInt31].
|
|
o. /*invoke: Union([exact=Class5], [exact=JSUInt31])*/ toString();
|
|
}
|
|
}
|
|
|
|
/*member: promotedAndIfThenElse:[null]*/
|
|
promotedAndIfThenElse() {
|
|
_promotedAndIfThenElse(0, true);
|
|
_promotedAndIfThenElse(new Class5(), false);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Test if-then-else statement with negated is-test in &&
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*member: Class6.:[exact=Class6]*/
|
|
class Class6 {}
|
|
|
|
/*member: _promotedNotAndIfThenElse:[null]*/
|
|
_promotedNotAndIfThenElse(
|
|
/*Union([exact=Class6], [exact=JSUInt31])*/ o,
|
|
/*[exact=JSBool]*/ c) {
|
|
if (o is! Class6 && c) {
|
|
o. /*invoke: Union([exact=Class6], [exact=JSUInt31])*/ toString();
|
|
} else {
|
|
o. /*invoke: Union([exact=Class6], [exact=JSUInt31])*/ toString();
|
|
}
|
|
}
|
|
|
|
/*member: promotedNotAndIfThenElse:[null]*/
|
|
promotedNotAndIfThenElse() {
|
|
_promotedNotAndIfThenElse(0, true);
|
|
_promotedNotAndIfThenElse(new Class6(), false);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Test if-then statement with is-test in ||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*member: Class7.:[exact=Class7]*/
|
|
class Class7 {}
|
|
|
|
/*member: _promotedOrIfThen:[null]*/
|
|
_promotedOrIfThen(
|
|
/*Union([exact=Class7], [exact=JSUInt31])*/ o,
|
|
/*[exact=JSBool]*/ c) {
|
|
if (o is Class7 || c) {
|
|
o. /*invoke: Union([exact=Class7], [exact=JSUInt31])*/ toString();
|
|
}
|
|
}
|
|
|
|
/*member: promotedOrIfThen:[null]*/
|
|
promotedOrIfThen() {
|
|
_promotedOrIfThen(0, true);
|
|
_promotedOrIfThen(new Class7(), false);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Test if-then-else statement with is-test in ||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*member: Class8.:[exact=Class8]*/
|
|
class Class8 {}
|
|
|
|
/*member: _promotedOrIfThenElse:[null]*/
|
|
_promotedOrIfThenElse(
|
|
/*Union([exact=Class8], [exact=JSUInt31])*/ o,
|
|
/*[exact=JSBool]*/ c) {
|
|
if (o is Class8 || c) {
|
|
o. /*invoke: Union([exact=Class8], [exact=JSUInt31])*/ toString();
|
|
} else {
|
|
// TODO(johnniwinther): Use negative type knowledge to show that the
|
|
// receiver must be [exact=JSUInt31].
|
|
o. /*invoke: Union([exact=Class8], [exact=JSUInt31])*/ toString();
|
|
}
|
|
}
|
|
|
|
/*member: promotedOrIfThenElse:[null]*/
|
|
promotedOrIfThenElse() {
|
|
_promotedOrIfThenElse(0, true);
|
|
_promotedOrIfThenElse(new Class8(), false);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Test if-then-else statement with negated is-test in ||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*member: Class9.:[exact=Class9]*/
|
|
class Class9 {}
|
|
|
|
/*member: _promotedNotOrIfThenElse:[null]*/
|
|
_promotedNotOrIfThenElse(
|
|
/*Union([exact=Class9], [exact=JSUInt31])*/ o,
|
|
/*[exact=JSBool]*/ c) {
|
|
if (o is! Class9 || c) {
|
|
o. /*invoke: Union([exact=Class9], [exact=JSUInt31])*/ toString();
|
|
} else {
|
|
o. /*invoke: [exact=Class9]*/ toString();
|
|
}
|
|
}
|
|
|
|
/*member: promotedNotOrIfThenElse:[null]*/
|
|
promotedNotOrIfThenElse() {
|
|
_promotedNotOrIfThenElse(0, true);
|
|
_promotedNotOrIfThenElse(new Class9(), false);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Test if-then statement with doubly negated is-test
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*member: Class10.:[exact=Class10]*/
|
|
class Class10 {}
|
|
|
|
/*member: _promotedNotNotIfThen:[null]*/
|
|
_promotedNotNotIfThen(/*Union([exact=Class10], [exact=JSUInt31])*/ o) {
|
|
if (!(o is! Class10)) {
|
|
o
|
|
.
|
|
/*invoke: [exact=Class10]*/
|
|
toString();
|
|
}
|
|
}
|
|
|
|
/*member: promotedNotNotIfThen:[null]*/
|
|
promotedNotNotIfThen() {
|
|
_promotedNotNotIfThen(0);
|
|
_promotedNotNotIfThen(new Class10());
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Test if-then-else statement with negated is-test in parentheses
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*member: Class11.:[exact=Class11]*/
|
|
class Class11 {}
|
|
|
|
/*member: _promotedParenNotIfThenElse:[null]*/
|
|
_promotedParenNotIfThenElse(
|
|
/*Union([exact=Class11], [exact=JSUInt31])*/ o) {
|
|
if (!(o is Class11)) {
|
|
// TODO(johnniwinther): Use negative type knowledge to show that the
|
|
// receiver must be [exact=JSUInt31].
|
|
o. /*invoke: Union([exact=Class11], [exact=JSUInt31])*/ toString();
|
|
} else {
|
|
o
|
|
.
|
|
/*invoke: [exact=Class11]*/
|
|
toString();
|
|
}
|
|
}
|
|
|
|
/*member: promotedParenNotIfThenElse:[null]*/
|
|
promotedParenNotIfThenElse() {
|
|
_promotedParenNotIfThenElse(0);
|
|
_promotedParenNotIfThenElse(new Class11());
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Test if-then statement with null-test
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*member: _nullIfThen:[null]*/
|
|
_nullIfThen(/*[null|exact=JSUInt31]*/ o) {
|
|
if (o == null) {
|
|
o. /*invoke: [null]*/ toString();
|
|
}
|
|
}
|
|
|
|
/*member: nullIfThen:[null]*/
|
|
nullIfThen() {
|
|
_nullIfThen(0);
|
|
_nullIfThen(null);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Test if-then-else statement null-test
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*member: _nullIfThenElse:[null]*/
|
|
_nullIfThenElse(/*[null|exact=JSUInt31]*/ o) {
|
|
if (o == null) {
|
|
o. /*invoke: [null]*/ toString();
|
|
} else {
|
|
o. /*invoke: [exact=JSUInt31]*/ toString();
|
|
}
|
|
}
|
|
|
|
/*member: nullIfThenElse:[null]*/
|
|
nullIfThenElse() {
|
|
_nullIfThenElse(0);
|
|
_nullIfThenElse(null);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Test if-then statement with negated null-test
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*member: _notNullIfThen:[null]*/
|
|
_notNullIfThen(/*[null|exact=JSUInt31]*/ o) {
|
|
if (o != null) {
|
|
o. /*invoke: [exact=JSUInt31]*/ toString();
|
|
}
|
|
}
|
|
|
|
/*member: notNullIfThen:[null]*/
|
|
notNullIfThen() {
|
|
_notNullIfThen(0);
|
|
_notNullIfThen(null);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Test if-then-else statement with negated null-test
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*member: _notNullIfThenElse:[null]*/
|
|
_notNullIfThenElse(/*[null|exact=JSUInt31]*/ o) {
|
|
if (o != null) {
|
|
o. /*invoke: [exact=JSUInt31]*/ toString();
|
|
} else {
|
|
o. /*invoke: [null]*/ toString();
|
|
}
|
|
}
|
|
|
|
/*member: notNullIfThenElse:[null]*/
|
|
notNullIfThenElse() {
|
|
_notNullIfThenElse(0);
|
|
_notNullIfThenElse(null);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Test if-then statement with null-test in &&
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*member: _nullAndIfThen:[null]*/
|
|
_nullAndIfThen(/*[null|exact=JSUInt31]*/ o, /*[exact=JSBool]*/ c) {
|
|
if (o == null && c) {
|
|
o. /*invoke: [null]*/ toString();
|
|
}
|
|
}
|
|
|
|
/*member: nullAndIfThen:[null]*/
|
|
nullAndIfThen() {
|
|
_nullAndIfThen(0, true);
|
|
_nullAndIfThen(null, false);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Test if-then-else statement null-test in &&
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*member: _nullAndIfThenElse:[null]*/
|
|
_nullAndIfThenElse(/*[null|exact=JSUInt31]*/ o, /*[exact=JSBool]*/ c) {
|
|
if (o == null && c) {
|
|
o. /*invoke: [null]*/ toString();
|
|
} else {
|
|
o. /*invoke: [null|exact=JSUInt31]*/ toString();
|
|
}
|
|
}
|
|
|
|
/*member: nullAndIfThenElse:[null]*/
|
|
nullAndIfThenElse() {
|
|
_nullAndIfThenElse(0, true);
|
|
_nullAndIfThenElse(null, false);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Test if-then statement with negated null-test in &&
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*member: _notNullAndIfThen:[null]*/
|
|
_notNullAndIfThen(/*[null|exact=JSUInt31]*/ o, /*[exact=JSBool]*/ c) {
|
|
if (o != null && c) {
|
|
o. /*invoke: [exact=JSUInt31]*/ toString();
|
|
}
|
|
}
|
|
|
|
/*member: notNullAndIfThen:[null]*/
|
|
notNullAndIfThen() {
|
|
_notNullAndIfThen(0, true);
|
|
_notNullAndIfThen(null, false);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Test if-then-else statement with negated null-test in &&
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*member: _notNullAndIfThenElse:[null]*/
|
|
_notNullAndIfThenElse(/*[null|exact=JSUInt31]*/ o, /*[exact=JSBool]*/ c) {
|
|
if (o != null && c) {
|
|
o. /*invoke: [exact=JSUInt31]*/ toString();
|
|
} else {
|
|
o. /*invoke: [null|exact=JSUInt31]*/ toString();
|
|
}
|
|
}
|
|
|
|
/*member: notNullAndIfThenElse:[null]*/
|
|
notNullAndIfThenElse() {
|
|
_notNullAndIfThenElse(0, true);
|
|
_notNullAndIfThenElse(null, false);
|
|
}
|