// 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); }