blob: 82f4994e99c452d62c168437add4a73f0b6974e7 [file] [log] [blame]
// Copyright (c) 2018, 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() {
test1();
test2();
test3();
test4();
test5();
test6();
test7();
test8();
test9();
test10();
test11();
test12();
test13();
test14();
test15();
test16();
test17();
test18();
test19();
test20();
test20b();
test21();
test21b();
test22();
test23();
test24();
test25();
test26();
test27();
test28();
test29();
test30();
}
/*member: A1.:[exact=A1]*/
class A1 {
/*member: A1.f1:[null]*/
int f1;
}
/*member: test1:[null]*/
test1() {
new A1();
}
/*member: A2.:[exact=A2]*/
class A2 {
/*member: A2.f2a:[null]*/
int f2a;
/*member: A2.f2b:[exact=JSUInt31]*/
int f2b = 1;
}
/*member: test2:[null]*/
test2() {
new A2();
}
class A3 {
/*member: A3.f3a:[exact=JSUInt31]*/
int f3a;
/*member: A3.f3b:[null|exact=JSUInt31]*/
int f3b;
/*member: A3.:[exact=A3]*/
A3() : f3a = 1;
}
/*member: test3:[null]*/
test3() {
new A3(). /*update: [exact=A3]*/ f3b = 2;
}
class A4 {
/*member: A4.f4a:Union([exact=JSString], [exact=JSUInt31])*/
dynamic f4a;
/*member: A4.f4b:Value([null|exact=JSString], value: "a")*/
dynamic f4b;
/*member: A4.:[exact=A4]*/
A4() : f4a = 1;
}
/*member: test4:[null]*/
test4() {
A4 a = new A4();
a. /*update: [exact=A4]*/ f4a = "a";
a. /*update: [exact=A4]*/ f4b = "a";
}
class A5 {
/*member: A5.f5a:Union([exact=JSString], [exact=JSUInt31])*/
dynamic f5a = 1;
/*member: A5.f5b:Union([exact=JSString], [exact=JSUInt31])*/
dynamic f5b = 1;
/*member: A5.:[exact=A5]*/
A5(/*[exact=JSBool]*/ x) {
/*update: [exact=A5]*/ f5a = "1";
if (x) {
/*update: [exact=A5]*/ f5b = "1";
} else {
/*update: [exact=A5]*/ f5b = "2";
}
}
}
/*member: test5:[null]*/
test5() {
new A5(true);
new A5(false);
}
class A6 {
/*member: A6.f6a:Union([exact=JSString], [exact=JSUInt31])*/
dynamic f6a = 1;
/*member: A6.f6b:Union([exact=JSExtendableArray], [exact=JSString], [exact=JSUInt31])*/
dynamic f6b = 1;
/*member: A6.:[exact=A6]*/
A6(/*[exact=JSBool]*/ x) {
/*update: [exact=A6]*/ f6a = "1";
if (x) {
/*update: [exact=A6]*/ f6b = "1";
} else {
/*update: [exact=A6]*/ f6b = "2";
}
if (x) {
/*update: [exact=A6]*/ f6b = new List();
} else {
/*update: [exact=A6]*/ f6b = new List();
}
}
}
/*member: test6:[null]*/
test6() {
new A6(true);
new A6(false);
}
class A7 {
/*member: A7.f7a:Union([exact=JSExtendableArray], [exact=JSString], [exact=JSUInt31])*/
dynamic f7a = 1;
/*member: A7.f7b:Union([exact=JSExtendableArray], [exact=JSString], [exact=JSUInt31])*/
dynamic f7b = 1;
/*member: A7.:[exact=A7]*/
A7(/*[exact=JSBool]*/ x) {
/*update: [exact=A7]*/ f7a = "1";
if (x) {
/*update: [exact=A7]*/ f7b = "1";
} else {
/*update: [exact=A7]*/ f7b = "2";
}
if (x) {
/*update: [exact=A7]*/ f7a = new List();
/*update: [exact=A7]*/ f7b = new List();
} else {
/*update: [exact=A7]*/ f7b = new List();
}
}
}
/*member: test7:[null]*/
test7() {
new A7(true);
new A7(false);
}
class A8 {
/*member: A8.f8:Value([null|exact=JSString], value: "1")*/
dynamic f8;
/*member: A8.:[exact=A8]*/
A8(/*[exact=JSBool]*/ x) {
if (x) {
/*update: [exact=A8]*/ f8 = "1";
} else {}
}
}
/*member: test8:[null]*/
test8() {
new A8(true);
new A8(false);
}
class A9 {
/*member: A9.f9:Value([null|exact=JSString], value: "1")*/
dynamic f9;
/*member: A9.:[exact=A9]*/
A9(/*[exact=JSBool]*/ x) {
if (x) {
} else {
/*update: [exact=A9]*/ f9 = "1";
}
}
}
/*member: test9:[null]*/
test9() {
new A9(true);
new A9(false);
}
class A10 {
/*member: A10.f10:[exact=JSUInt31]*/
int f10;
/*member: A10.:[exact=A10]*/
A10() {
/*update: [exact=A10]*/ f10 = 1;
}
/*member: A10.m10:[subclass=JSUInt32]*/
m10() => /*[exact=A10]*/ f10 /*invoke: [exact=JSUInt31]*/ + 1;
}
/*member: f10:[null]*/
void f10(/*[null]*/ x) {
x. /*update: [null]*/ f10 = "2";
}
/*member: test10:[null]*/
test10() {
A10 a;
f10(a);
a = new A10();
a. /*invoke: [exact=A10]*/ m10();
}
/*member: S11.:[exact=S11]*/
class S11 {
/*member: S11.fs11:[exact=JSUInt31]*/
int fs11 = 1;
/*member: S11.ms11:[null]*/
ms11() {
/*update: [exact=A11]*/ fs11 = 1;
}
}
/*member: A11.:[exact=A11]*/
class A11 extends S11 {
/*member: A11.m11:[null]*/
m11() {
/*invoke: [exact=A11]*/ ms11();
}
}
/*member: test11:[null]*/
test11() {
A11 a = new A11();
a. /*invoke: [exact=A11]*/ m11();
}
class S12 {
/*member: S12.fs12:Union([exact=JSString], [exact=JSUInt31])*/
dynamic fs12 = 1;
/*member: S12.:[exact=S12]*/
S12() {
/*update: [exact=A12]*/ fs12 = "2";
}
}
/*member: A12.:[exact=A12]*/
class A12 extends S12 {}
/*member: test12:[null]*/
test12() {
new A12();
}
class S13 {
/*member: S13.fs13:[exact=JSUInt31]*/
int fs13;
/*member: S13.:[exact=S13]*/
S13() {
/*update: [exact=A13]*/ fs13 = 1;
}
}
class A13 extends S13 {
/*member: A13.:[exact=A13]*/
A13() {
/*update: [exact=A13]*/ fs13 = 1;
}
}
/*member: test13:[null]*/
test13() {
new A13();
}
class A14 {
/*member: A14.f14:[exact=JSUInt31]*/
var f14;
/*member: A14.:[exact=A14]*/
A14() {
/*update: [exact=A14]*/ f14 = 1;
}
/*member: A14.other:[exact=A14]*/
A14.other() {
/*update: [exact=A14]*/ f14 = 2;
}
}
/*member: test14:[null]*/
test14() {
// ignore: unused_local_variable
A14 a = new A14();
a = new A14.other();
}
class A15 {
/*member: A15.f15:Union([exact=JSExtendableArray], [exact=JSString])*/
var f15;
/*member: A15.:[exact=A15]*/
A15() {
/*update: [exact=A15]*/ f15 = "1";
}
/*member: A15.other:[exact=A15]*/
A15.other() {
/*update: [exact=A15]*/ f15 = new List();
}
}
/*member: test15:[null]*/
test15() {
// ignore: unused_local_variable
A15 a = new A15();
a = new A15.other();
}
class A16 {
// TODO(johnniwinther): Investigate why these include `null`. The ast version
// didn't.
/*member: A16.f16:Union(null, [exact=JSString], [exact=JSUInt31])*/
var f16;
/*member: A16.:[exact=A16]*/
A16() {
/*update: [exact=A16]*/ f16 = "1";
}
/*member: A16.other:[exact=A16]*/
A16.other() : f16 = 1 {}
}
/*member: test16:[null]*/
test16() {
// ignore: unused_local_variable
A16 a = new A16();
a = new A16.other();
}
/*member: g17:[exact=JSUInt31]*/
g17([/*[exact=A17]*/ p]) => p. /*update: [exact=A17]*/ f17 = 1;
class A17 {
/*member: A17.f17:[null|exact=JSUInt31]*/
var f17;
/*member: A17.:[exact=A17]*/
A17(/*[exact=JSBool]*/ x) {
var a;
if (x) {
a = this;
} else {
a = g17;
}
a(this);
}
}
/*member: test17:[null]*/
test17() {
new A17(true);
new A17(false);
}
class A18 {
/*member: A18.f18a:[exact=JSUInt31]*/
var f18a;
/*member: A18.f18b:Value([exact=JSString], value: "1")*/
var f18b;
/*member: A18.f18c:Union(null, [exact=A18], [exact=JSUInt31])*/
var f18c;
/*member: A18.:[exact=A18]*/
A18(/*[exact=JSBool]*/ x) {
/*update: [exact=A18]*/ f18a = 1;
var a;
if (x) {
/*update: [exact=A18]*/ f18b = "1";
a = this;
} else {
a = 1;
/*update: [exact=A18]*/ f18b = "1";
}
/*update: [exact=A18]*/ f18c = a;
}
}
/*member: test18:[null]*/
test18() {
new A18(true);
new A18(false);
}
class A19 {
/*member: A19.f19a:[exact=JSUInt31]*/
var f19a;
/*member: A19.f19b:Value([exact=JSString], value: "1")*/
var f19b;
/*member: A19.f19c:Union(null, [exact=A19], [exact=JSUInt31])*/
var f19c;
/*member: A19.:[exact=A19]*/
A19(/*[exact=JSBool]*/ x) {
/*update: [exact=A19]*/ f19a = 1;
var a;
if (x) {
/*update: [exact=A19]*/ f19b = "1";
a = this;
} else {
a = 1;
/*update: [exact=A19]*/ f19b = "1";
}
/*update: [exact=A19]*/ f19c = a;
a();
}
}
/*member: test19:[null]*/
test19() {
new A19(true);
new A19(false);
}
class A20 {
/*member: A20.f20:[null]*/
var f20;
/*member: A20.:[exact=A20]*/
A20() {
dynamic a = this;
/*iterator: [exact=A20]*/
/*current: [empty]*/
/*moveNext: [empty]*/
for (/*update: [exact=A20]*/ f20 in a) {}
}
get iterator => this;
get current => 42;
bool moveNext() => false;
}
/*member: test20:[null]*/
test20() {
new A20();
}
class A20b extends Iterable implements Iterator {
/*member: A20b.f20b:[null|exact=JSUInt31]*/
var f20b;
/*member: A20b.:[exact=A20b]*/
A20b() {
dynamic a = this;
/*iterator: [exact=A20b]*/
/*current: [exact=A20b]*/
/*moveNext: [exact=A20b]*/
for (/*update: [exact=A20b]*/ f20b in a) {}
}
/*member: A20b.iterator:[exact=A20b]*/
@override
get iterator => this;
/*member: A20b.current:[exact=JSUInt31]*/
@override
get current => 42;
/*member: A20b.moveNext:Value([exact=JSBool], value: false)*/
@override
bool moveNext() => false;
}
/*member: test20b:[null]*/
test20b() {
new A20b();
}
class A21 {
/*member: A21.f21:[null|exact=JSUInt31]*/
var f21;
/*member: A21.:[exact=A21]*/
A21() {
dynamic a = this;
/*iterator: [exact=A21]*/
/*current: [empty]*/
/*moveNext: [empty]*/
for (
// ignore: unused_local_variable
var i in a) {}
/*update: [exact=A21]*/ f21 = 42;
}
get iterator => null;
}
/*member: test21:[null]*/
test21() {
new A21();
}
class A21b extends Iterable {
/*member: A21b.f21:[null|exact=JSUInt31]*/
var f21;
/*member: A21b.:[exact=A21b]*/
A21b() {
dynamic a = this;
/*iterator: [exact=A21b]*/
/*current: [null]*/
/*moveNext: [null]*/
for (
// ignore: unused_local_variable
var i in a) {}
/*update: [exact=A21b]*/ f21 = 42;
}
/*member: A21b.iterator:[null]*/
@override
get iterator => null;
}
/*member: test21b:[null]*/
test21b() {
new A21b();
}
class A22 {
/*member: A22.f22a:[exact=JSUInt31]*/
var f22a;
/*member: A22.f22b:[exact=JSUInt31]*/
var f22b;
/*member: A22.f22c:Value([null|exact=JSString], value: "foo")*/
var f22c;
/*member: A22.:[exact=A22]*/
A22() {
/*update: [exact=A22]*/ f22a = 42;
/*update: [exact=A22]*/ f22b = /*[exact=A22]*/ f22a == null
? 42
: /*[exact=A22]*/ f22c == null ? 41 : 43;
/*update: [exact=A22]*/ f22c = 'foo';
}
}
/*member: test22:[null]*/
test22() {
new A22();
}
class A23 {
/*member: A23.f23a:[null|exact=JSUInt31]*/
var f23a = 42;
/*member: A23.f23b:[null|exact=JSUInt31]*/
var f23b = 42;
/*member: A23.f23c:[null|exact=JSUInt31]*/
var f23c = 42;
/*member: A23.f23d:[null|exact=JSUInt31]*/
var f23d = 42;
/*member: A23.:[exact=A23]*/
A23() {
// Test string interpolation.
'${/*update: [exact=A23]*/ f23a = null}';
// Test string juxtaposition.
''
'${/*update: [exact=A23]*/ f23b = null}';
// Test list literal.
[/*update: [exact=A23]*/ f23c = null];
// Test map literal.
// ignore: unused_local_variable
var c = {'foo': /*update: [exact=A23]*/ f23d = null};
}
}
/*member: test23:[null]*/
test23() {
new A23();
}
class A24 {
/*member: A24.f24a:[subclass=JSPositiveInt]*/
var f24a = 42;
/*member: A24.f24b:[subclass=JSPositiveInt]*/
var f24b = 42;
/*member: A24.f24c:[exact=JSUInt31]*/
var f24c = 42;
/*member: A24.f24d:[exact=JSUInt31]*/
final f24d;
/*member: A24.f24e:Union(null, [exact=JSNumNotInt], [exact=JSUInt31])*/
var f24e;
/*member: A24.f24f:Value([null|exact=JSString], value: "foo")*/
var f24f = null;
/*member: A24.:[exact=A24]*/
A24() : f24d = 42 {
/*[subclass=A24]*/ /*update: [subclass=A24]*/ f24a
/*invoke: [subclass=JSPositiveInt]*/ ++;
/*[subclass=A24]*/ /*update: [subclass=A24]*/ f24b
/*invoke: [subclass=JSPositiveInt]*/ += 42;
var f24f = 'foo';
this. /*update: [subclass=A24]*/ f24f = f24f;
}
/*member: A24.foo:[exact=A24]*/
A24.foo(/*[subclass=A24]*/ other)
: f24c = other. /*[subclass=A24]*/ f24c,
f24d = other. /*[subclass=A24]*/ f24d,
f24e = other
. /*invoke: [subclass=A24]*/
bar24();
/*member: A24.+:Value([exact=JSString], value: "foo")*/
operator +(/*[empty]*/ other) => 'foo';
/*member: A24.bar24:[exact=JSNumNotInt]*/
bar24() => 42.5;
}
/*member: B24.:[exact=B24]*/
class B24 extends A24 {
/*member: B24.bar24:[exact=JSUInt31]*/
@override
bar24() => 42;
}
/*member: test24:[null]*/
test24() {
new A24();
new A24.foo(new A24());
new A24.foo(new B24());
}
/*member: A25.:[exact=A25]*/
class A25 {
/*member: A25.f25:[exact=JSUInt31]*/
var f25 = 42;
}
/*member: B25.:[exact=B25]*/
class B25 {
/*member: B25.f25:Value([exact=JSString], value: "42")*/
var f25 = '42';
}
/*member: test25:[null]*/
test25() {
new B25();
new A25(). /*update: [exact=A25]*/ f25 = new A25(). /*[exact=A25]*/ f25;
}
/*member: A26.:[exact=A26]*/
class A26 {
/*member: A26.f26:[subclass=JSPositiveInt]*/
var f26 = 42;
}
/*member: B26.:[exact=B26]*/
class B26 {
/*member: B26.f26:[exact=JSUInt31]*/
var f26 = 54;
}
/*member: test26:[null]*/
test26() {
new A26(). /*update: [exact=A26]*/ f26 = <dynamic>[new B26(), new A26()]
/*Container([exact=JSExtendableArray], element: Union([exact=A26], [exact=B26]), length: 2)*/
[0]
. /*Union([exact=A26], [exact=B26])*/ f26
/*invoke: [subclass=JSPositiveInt]*/ +
42;
}
class A27 {
/*member: A27.f27a:[exact=JSUInt31]*/
var f27a;
/*member: A27.f27b:[null|exact=JSUInt31]*/
var f27b;
/*member: A27.:[exact=A27]*/
A27() {
this. /*update: [subclass=A27]*/ f27a = 42;
this. /*update: [subclass=A27]*/ f27b = 42;
}
}
/*member: B27.:[exact=B27]*/
class B27 extends A27 {
@override
set f27b(/*[exact=JSUInt31]*/ value) {}
}
/*member: test27:[null]*/
test27() {
new A27();
new B27();
}
class A28 {
/*member: A28.f28a:[exact=JSUInt31]*/
var f28a;
/*member: A28.f28b:[null|exact=JSUInt31]*/
var f28b;
/*member: A28.:[exact=A28]*/
A28(/*[exact=JSUInt31]*/ x) {
this. /*update: [exact=A28]*/ f28a = x;
if (x /*invoke: [exact=JSUInt31]*/ == 0) return;
this. /*update: [exact=A28]*/ f28b = x;
}
}
/*member: test28:[null]*/
test28() {
new A28(0);
new A28(1);
}
class A29 {
/*member: A29.f29a:[exact=JSUInt31]*/
var f29a;
/*member: A29.f29b:[null|exact=JSUInt31]*/
var f29b;
/*member: A29.:[exact=A29]*/
A29(/*[exact=JSUInt31]*/ x) {
this. /*update: [exact=A29]*/ f29a = x;
if (x /*invoke: [exact=JSUInt31]*/ == 0) {
} else {
return;
}
this. /*update: [exact=A29]*/ f29b = x;
}
}
/*member: test29:[null]*/
test29() {
new A29(0);
new A29(1);
}
class A30 {
/*member: A30.f30a:[exact=JSUInt31]*/
var f30a;
/*member: A30.f30b:[exact=JSUInt31]*/
var f30b;
/*member: A30.f30c:[null|exact=JSUInt31]*/
var f30c;
/*member: A30.:[exact=A30]*/
A30(/*[exact=JSUInt31]*/ x) {
this. /*update: [exact=A30]*/ f30a = x;
if (x /*invoke: [exact=JSUInt31]*/ == 0) {
this. /*update: [exact=A30]*/ f30b = 1;
} else {
this. /*update: [exact=A30]*/ f30b = x;
return;
}
this. /*update: [exact=A30]*/ f30c = x;
}
}
/*member: test30:[null]*/
test30() {
new A30(0);
new A30(1);
}