blob: 6ad775a0f75fc57bd24710f7ab842c72cb306872 [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.
// Regression test for issue 28919.
/*member: foo1:[null|powerset={null}]*/
foo1() {
final methods = [];
var res, sum;
for (
int i = 0;
i /*invoke: [subclass=JSPositiveInt|powerset={I}{O}{N}]*/ != 3;
i /*invoke: [subclass=JSPositiveInt|powerset={I}{O}{N}]*/ ++
) {
methods
. /*invoke: Container([exact=JSExtendableArray|powerset={I}{G}{M}], element: [subclass=Closure|powerset={N}{O}{N}], length: null, powerset: {I}{G}{M})*/ add(
/*[null|powerset={null}]*/ (
int /*[exact=JSUInt31|powerset={I}{O}{N}]*/ x,
) {
res = x;
sum = x /*invoke: [exact=JSUInt31|powerset={I}{O}{N}]*/ + i;
},
);
}
methods /*Container([exact=JSExtendableArray|powerset={I}{G}{M}], element: [subclass=Closure|powerset={N}{O}{N}], length: null, powerset: {I}{G}{M})*/ [0](
499,
);
probe1res(res);
probe1sum(sum);
probe1methods(methods);
}
/*member: probe1res:[null|exact=JSUInt31|powerset={null}{I}{O}{N}]*/
probe1res(/*[null|exact=JSUInt31|powerset={null}{I}{O}{N}]*/ x) => x;
/*member: probe1sum:[null|subclass=JSPositiveInt|powerset={null}{I}{O}{N}]*/
probe1sum(/*[null|subclass=JSPositiveInt|powerset={null}{I}{O}{N}]*/ x) => x;
/*member: probe1methods:Container([exact=JSExtendableArray|powerset={I}{G}{M}], element: [subclass=Closure|powerset={N}{O}{N}], length: null, powerset: {I}{G}{M})*/
probe1methods(
/*Container([exact=JSExtendableArray|powerset={I}{G}{M}], element: [subclass=Closure|powerset={N}{O}{N}], length: null, powerset: {I}{G}{M})*/ x,
) => x;
/*member: nonContainer:[exact=JSExtendableArray|powerset={I}{G}{M}]*/
nonContainer(/*[exact=JSUInt31|powerset={I}{O}{N}]*/ choice) {
var m = choice /*invoke: [exact=JSUInt31|powerset={I}{O}{N}]*/ == 0
? []
: "<String>";
if (m is! List) throw 123;
// The union then filter leaves us with a non-container type.
return m;
}
/*member: foo2:[null|powerset={null}]*/
foo2(int /*[exact=JSUInt31|powerset={I}{O}{N}]*/ choice) {
final methods = nonContainer(choice);
/// ignore: unused_local_variable
var res, sum;
for (
int i = 0;
i /*invoke: [subclass=JSPositiveInt|powerset={I}{O}{N}]*/ != 3;
i /*invoke: [subclass=JSPositiveInt|powerset={I}{O}{N}]*/ ++
) {
methods. /*invoke: [exact=JSExtendableArray|powerset={I}{G}{M}]*/ add(
/*[null|powerset={null}]*/ (
int
/*spec.[null|subclass=Object|powerset={null}{IN}{GFUO}{IMN}]*/
/*prod.[subclass=JSInt|powerset={I}{O}{N}]*/
x,
) {
res = x;
sum = x /*invoke: [subclass=JSInt|powerset={I}{O}{N}]*/ + i;
},
);
}
methods /*[exact=JSExtendableArray|powerset={I}{G}{M}]*/ [0](499);
probe2res(res);
probe2methods(methods);
}
/*member: probe2res:[null|subclass=JSInt|powerset={null}{I}{O}{N}]*/
probe2res(
/*[null|subclass=JSInt|powerset={null}{I}{O}{N}]*/
x,
) => x;
/*member: probe2methods:[exact=JSExtendableArray|powerset={I}{G}{M}]*/
probe2methods(/*[exact=JSExtendableArray|powerset={I}{G}{M}]*/ x) => x;
/*member: main:[null|powerset={null}]*/
main() {
foo1();
foo2(0);
foo2(1);
}