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