blob: a19c622773bcef82b33ecd7145749f8c9b0ec7ac [file] [log] [blame]
// Copyright (c) 2023, 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.
untypedList(List list) {
var a = /*
checkingOrder={List<dynamic>,[],[()],[(), ()],[(), (), (), ...]},
subtypes={[],[()],[(), ()],[(), (), (), ...]},
type=List<dynamic>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[_] /*space=<[()]>*/ => 1,
[_, _] /*space=<[(), ()]>*/ => 2,
[_, ..., _] /*space=<[(), ...List<dynamic>, ()]>*/ => 3,
};
}
sealed class A {}
class B extends A {}
class C extends A {}
extension type ExtensionTypeList<T>(List<T> it) implements List<T> {}
typedList(List<A> list) {
var a = /*
checkingOrder={List<A>,<A>[],<A>[()],<A>[(), ()],<A>[(), (), (), ...]},
subtypes={<A>[],<A>[()],<A>[(), ()],<A>[(), (), (), ...]},
type=List<A>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[B b] /*space=<[B]>*/ => 1,
[C c] /*space=<[C]>*/ => 2,
[_, _] /*space=<[A, A]>*/ => 3,
[B b, ..., _] /*space=<[B, ...List<A>, A]>*/ => 4,
[C c, ..., _] /*space=<[C, ...List<A>, A]>*/ => 5,
};
}
restWithSubpattern(List list) {
var a = /*
checkingOrder={List<dynamic>,[...]},
subtypes={[...]},
type=List<dynamic>
*/
switch (list) {
[...var l] /*space=<[...List<dynamic>]>*/ => l.length,
};
var b = /*
checkingOrder={List<dynamic>,[...]},
error=non-exhaustive:[...[...]]/[...],
subtypes={[...]},
type=List<dynamic>
*/
switch (list) {
[...List<String> l] /*space=<[...List<String>]>*/ => l.length,
};
}
exhaustive0(List list) {
return /*
checkingOrder={List<dynamic>,[...]},
subtypes={[...]},
type=List<dynamic>
*/
switch (list) {
[...] /*space=<[...List<dynamic>]>*/ => 0,
};
}
exhaustive1(List list) {
return /*
checkingOrder={List<dynamic>,[],[(), ...]},
subtypes={[],[(), ...]},
type=List<dynamic>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[_] /*space=<[()]>*/ => 1,
[_, ...] /*space=<[(), ...List<dynamic>]>*/ => 2,
};
}
exhaustive2(List list) {
return /*
checkingOrder={List<dynamic>,[],[()],[(), (), ...]},
subtypes={[],[()],[(), (), ...]},
type=List<dynamic>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[_] /*space=<[()]>*/ => 1,
[_, _] /*space=<[(), ()]>*/ => 2,
[_, _, ...] /*space=<[(), (), ...List<dynamic>]>*/ => 3,
};
}
exhaustive3(List list) {
return /*
checkingOrder={List<dynamic>,[],[()],[(), ()],[(), (), (), ...]},
subtypes={[],[()],[(), ()],[(), (), (), ...]},
type=List<dynamic>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[_] /*space=<[()]>*/ => 1,
[_, _] /*space=<[(), ()]>*/ => 2,
[_, _, _] /*space=<[(), (), ()]>*/ => 3,
[_, _, _, ...] /*space=<[(), (), (), ...List<dynamic>]>*/ => 4,
};
}
exhaustive4(List list) {
return /*
checkingOrder={List<dynamic>,[],[()],[(), ()],[(), (), ()],[(), (), (), (), ...]},
subtypes={[],[()],[(), ()],[(), (), ()],[(), (), (), (), ...]},
type=List<dynamic>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[_] /*space=<[()]>*/ => 1,
[_, _] /*space=<[(), ()]>*/ => 2,
[_, _, _] /*space=<[(), (), ()]>*/ => 3,
[_, _, _, _] /*space=<[(), (), (), ()]>*/ => 4,
[_, _, _, _, ...] /*space=<[(), (), (), (), ...List<dynamic>]>*/ => 5,
};
}
exhaustive5(List list) {
return /*
checkingOrder={List<dynamic>,[],[()],[(), ()],[(), (), ()],[(), (), (), ()],[(), (), (), (), (), ...]},
subtypes={[],[()],[(), ()],[(), (), ()],[(), (), (), ()],[(), (), (), (), (), ...]},
type=List<dynamic>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[_] /*space=<[()]>*/ => 1,
[_, _] /*space=<[(), ()]>*/ => 2,
[_, _, _] /*space=<[(), (), ()]>*/ => 3,
[_, _, _, _] /*space=<[(), (), (), ()]>*/ => 4,
[_, _, _, _, _] /*space=<[(), (), (), (), ()]>*/ => 5,
[_, _, _, _, _, ...] /*space=<[(), (), (), (), (), ...List<dynamic>]>*/ =>
6,
};
}
exhaustive6(List list) {
return /*
checkingOrder={List<dynamic>,[],[()],[(), ()],[(), (), ()],[(), (), (), ()],[(), (), (), (), ()],[(), (), (), (), (), (), ...]},
subtypes={[],[()],[(), ()],[(), (), ()],[(), (), (), ()],[(), (), (), (), ()],[(), (), (), (), (), (), ...]},
type=List<dynamic>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[_] /*space=<[()]>*/ => 1,
[_, _] /*space=<[(), ()]>*/ => 2,
[_, _, _] /*space=<[(), (), ()]>*/ => 3,
[_, _, _, _] /*space=<[(), (), (), ()]>*/ => 4,
[_, _, _, _, _] /*space=<[(), (), (), (), ()]>*/ => 5,
[_, _, _, _, _, _] /*space=<[(), (), (), (), (), ()]>*/ => 6,
[
_,
_,
_,
_,
_,
_,
...
] /*space=<[(), (), (), (), (), (), ...List<dynamic>]>*/ =>
7,
};
}
exhaustive7(List list) {
return /*
checkingOrder={List<dynamic>,[],[()],[(), ()],[(), (), ()],[(), (), (), ()],[(), (), (), (), ()],[(), (), (), (), (), ()],[(), (), (), (), (), (), (), ...]},
subtypes={[],[()],[(), ()],[(), (), ()],[(), (), (), ()],[(), (), (), (), ()],[(), (), (), (), (), ()],[(), (), (), (), (), (), (), ...]},
type=List<dynamic>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[_] /*space=<[()]>*/ => 1,
[_, _] /*space=<[(), ()]>*/ => 2,
[_, _, _] /*space=<[(), (), ()]>*/ => 3,
[_, _, _, _] /*space=<[(), (), (), ()]>*/ => 4,
[_, _, _, _, _] /*space=<[(), (), (), (), ()]>*/ => 5,
[_, _, _, _, _, _] /*space=<[(), (), (), (), (), ()]>*/ => 6,
[_, _, _, _, _, _, _] /*space=<[(), (), (), (), (), (), ()]>*/ => 7,
[
_,
_,
_,
_,
_,
_,
_,
...
] /*space=<[(), (), (), (), (), (), (), ...List<dynamic>]>*/ =>
8,
};
}
exhaustive8(List list) {
return /*
checkingOrder={List<dynamic>,[],[()],[(), ()],[(), (), ()],[(), (), (), ()],[(), (), (), (), ()],[(), (), (), (), (), ()],[(), (), (), (), (), (), ()],[(), (), (), (), (), (), (), (), ...]},
subtypes={[],[()],[(), ()],[(), (), ()],[(), (), (), ()],[(), (), (), (), ()],[(), (), (), (), (), ()],[(), (), (), (), (), (), ()],[(), (), (), (), (), (), (), (), ...]},
type=List<dynamic>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[_] /*space=<[()]>*/ => 1,
[_, _] /*space=<[(), ()]>*/ => 2,
[_, _, _] /*space=<[(), (), ()]>*/ => 3,
[_, _, _, _] /*space=<[(), (), (), ()]>*/ => 4,
[_, _, _, _, _] /*space=<[(), (), (), (), ()]>*/ => 5,
[_, _, _, _, _, _] /*space=<[(), (), (), (), (), ()]>*/ => 6,
[_, _, _, _, _, _, _] /*space=<[(), (), (), (), (), (), ()]>*/ => 7,
[_, _, _, _, _, _, _, _] /*space=<[(), (), (), (), (), (), (), ()]>*/ => 8,
[
_,
_,
_,
_,
_,
_,
_,
_,
...
] /*space=<[(), (), (), (), (), (), (), (), ...List<dynamic>]>*/ =>
9,
};
}
exhaustive2Mid(List list) {
return /*
checkingOrder={List<dynamic>,[],[()],[(), ()],[(), (), (), ...]},
subtypes={[],[()],[(), ()],[(), (), (), ...]},
type=List<dynamic>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[_] /*space=<[()]>*/ => 1,
[_, _] /*space=<[(), ()]>*/ => 2,
[_, ..., _] /*space=<[(), ...List<dynamic>, ()]>*/ => 3,
};
}
exhaustive2End(List list) {
return /*
checkingOrder={List<dynamic>,[],[()],[(), ()],[(), (), ()],[(), (), (), (), ...]},
subtypes={[],[()],[(), ()],[(), (), ()],[(), (), (), (), ...]},
type=List<dynamic>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[_] /*space=<[()]>*/ => 1,
[_, _] /*space=<[(), ()]>*/ => 2,
[..., _, _] /*space=<[...List<dynamic>, (), ()]>*/ => 3,
};
}
exhaustiveRestWithExtraElement(List list) {
return /*
checkingOrder={List<dynamic>,[],[()],[(), ()],[(), (), ()],[(), (), (), (), ...]},
subtypes={[],[()],[(), ()],[(), (), ()],[(), (), (), (), ...]},
type=List<dynamic>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[_] /*space=<[()]>*/ => 1,
[_, _] /*space=<[(), ()]>*/ => 2,
[_, _, _] /*space=<[(), (), ()]>*/ => 3,
[_, _, _, _, ...] /*space=<[(), (), (), (), ...List<dynamic>]>*/ => 4,
};
}
nonExhaustiveNoRest(List list) {
return /*
checkingOrder={List<dynamic>,[],[()],[(), ()],[(), (), (), ...]},
error=non-exhaustive:[_, _, _, ...],
subtypes={[],[()],[(), ()],[(), (), (), ...]},
type=List<dynamic>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[_] /*space=<[()]>*/ => 1,
[_, _] /*space=<[(), ()]>*/ => 2,
[_, _, _] /*space=<[(), (), ()]>*/ => 3,
};
}
nonExhaustiveTyped(List list) {
return /*
checkingOrder={List<dynamic>,[],[()],[(), ()],[(), (), (), ...]},
error=non-exhaustive:[_, _],
subtypes={[],[()],[(), ()],[(), (), (), ...]},
type=List<dynamic>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[_] /*space=<[()]>*/ => 1,
<int>[_, _] /*space=<int>[int, int]*/ => 2,
[_, _, _] /*space=<[(), (), ()]>*/ => 3,
[_, _, _, ...] /*space=<[(), (), (), ...List<dynamic>]>*/ => 7,
};
}
nonExhaustiveRestrictedHeadElement(List list) {
return /*
checkingOrder={List<dynamic>,[],[()],[(), ()],[(), (), (), ...]},
error=non-exhaustive:[Object(), Object()],
subtypes={[],[()],[(), ()],[(), (), (), ...]},
type=List<dynamic>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[_] /*space=<[()]>*/ => 1,
[_, 1] /*space=<[(), 1]>*/ => 2,
[_, _, _] /*space=<[(), (), ()]>*/ => 3,
[_, _, _, ...] /*space=<[(), (), (), ...List<dynamic>]>*/ => 8,
};
}
nonExhaustiveRestrictedTailElement(List list) {
return /*
checkingOrder={List<dynamic>,[],[()],[(), ()],[(), (), ()],[(), (), (), ()],[(), (), (), (), (), ...]},
error=non-exhaustive:[Object(), _, Object(), Object()];[Object(), _, _, ...[...], Object(), Object()]/[Object(), _, _, ..., Object(), Object()],
subtypes={[],[()],[(), ()],[(), (), ()],[(), (), (), ()],[(), (), (), (), (), ...]},
type=List<dynamic>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[_] /*space=<[()]>*/ => 1,
[_, _] /*space=<[(), ()]>*/ => 2,
[_, _, _] /*space=<[(), (), ()]>*/ => 3,
[_, ..., 1, _] /*space=<[(), ...List<dynamic>, (), 1]>*/ => 8,
};
}
nonExhaustiveRestrictedRest(List list) {
return /*
checkingOrder={List<dynamic>,[],[()],[(), ()],[(), (), (), ...]},
error=non-exhaustive:[Object(), Object(), Object(), ...[...]]/[Object(), Object(), Object(), ...],
subtypes={[],[()],[(), ()],[(), (), (), ...]},
type=List<dynamic>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[_] /*space=<[()]>*/ => 1,
[_, _] /*space=<[(), ()]>*/ => 2,
[_, _, _] /*space=<[(), (), ()]>*/ => 3,
[_, _, _, ...List<int> rest] /*space=<[(), (), (), ...List<int>]>*/ => 8,
};
}
nonExhaustiveRestrictedRestWithTail(List list) {
return /*
checkingOrder={List<dynamic>,[],[()],[(), ()],[(), (), ()],[(), (), (), ()],[(), (), (), (), (), ...]},
error=non-exhaustive:[Object(), _, Object(), Object()];[Object(), _, _, ...[...], Object(), Object()]/[Object(), _, _, ..., Object(), Object()],
subtypes={[],[()],[(), ()],[(), (), ()],[(), (), (), ()],[(), (), (), (), (), ...]},
type=List<dynamic>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[_] /*space=<[()]>*/ => 1,
[_, _] /*space=<[(), ()]>*/ => 2,
[_, _, _] /*space=<[(), (), ()]>*/ => 3,
[_, ...List<int> rest, _, _] /*space=<[(), ...List<int>, (), ()]>*/ => 8,
};
}
nonExhaustiveMissingCount(List list) {
return /*
checkingOrder={List<dynamic>,[],[()],[(), ()],[(), (), (), ...]},
error=non-exhaustive:[_, _],
subtypes={[],[()],[(), ()],[(), (), (), ...]},
type=List<dynamic>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[_] /*space=<[()]>*/ => 1,
[_, _, _] /*space=<[(), (), ()]>*/ => 3,
[_, _, _, ...] /*space=<[(), (), (), ...List<dynamic>]>*/ => 9,
};
}
unreachableAfterRestOnly(List list) {
return /*
checkingOrder={List<dynamic>,[],[(), ...]},
subtypes={[],[(), ...]},
type=List<dynamic>
*/
switch (list) {
[...] /*space=<[...List<dynamic>]>*/ => 0,
[_] /*
error=unreachable,
space=<[()]>
*/
=>
1,
};
}
unreachableAfterRest(List list) {
return /*
checkingOrder={List<dynamic>,[],[(), ...]},
subtypes={[],[(), ...]},
type=List<dynamic>
*/
switch (list) {
[_, ...] /*space=<[(), ...List<dynamic>]>*/ => 0,
[_] /*
error=unreachable,
space=<[()]>
*/
=>
1,
[...] /*space=<[...List<dynamic>]>*/ => 2,
};
}
nonExhaustiveAfterRest(List list) {
return /*
checkingOrder={List<dynamic>,[],[(), ...]},
error=non-exhaustive:[],
subtypes={[],[(), ...]},
type=List<dynamic>
*/
switch (list) {
[_, ...] /*space=<[(), ...List<dynamic>]>*/ => 0,
[_] /*
error=unreachable,
space=<[()]>
*/
=>
1,
};
}
exhaustiveSealed(List<A> list) {
return /*
checkingOrder={List<A>,<A>[],<A>[()],<A>[(), (), ...]},
subtypes={<A>[],<A>[()],<A>[(), (), ...]},
type=List<A>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[B()] /*space=<[B]>*/ => 1,
[C()] /*space=<[C]>*/ => 2,
[_, _, ...] /*space=<[A, A, ...List<A>]>*/ => 3,
};
}
exhaustiveSealedExtensionType(ExtensionTypeList<A> list) {
return /*
checkingOrder={List<A>,<A>[],<A>[()],<A>[(), (), ...]},
subtypes={<A>[],<A>[()],<A>[(), (), ...]},
type=List<A>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[B()] /*space=<[B]>*/ => 1,
[C()] /*space=<[C]>*/ => 2,
[_, _, ...] /*space=<[A, A, ...List<A>]>*/ => 3,
};
}
nonExhaustiveSealedSubtype(List<A> list) {
return /*
checkingOrder={List<A>,<A>[],<A>[()],<A>[(), ()],<A>[(), (), (), ...]},
error=non-exhaustive:[B(), C()],
subtypes={<A>[],<A>[()],<A>[(), ()],<A>[(), (), (), ...]},
type=List<A>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[_] /*space=<[A]>*/ => 1,
[_, B()] /*space=<[A, B]>*/ => 2,
[_, _, _, ...] /*space=<[A, A, A, ...List<A>]>*/ => 3,
};
}
nonExhaustiveSealedSubtypeExtensionType(ExtensionTypeList<A> list) {
return /*
checkingOrder={List<A>,<A>[],<A>[()],<A>[(), ()],<A>[(), (), (), ...]},
error=non-exhaustive:[B(), C()],
subtypes={<A>[],<A>[()],<A>[(), ()],<A>[(), (), (), ...]},
type=List<A>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[_] /*space=<[A]>*/ => 1,
[_, B()] /*space=<[A, B]>*/ => 2,
[_, _, _, ...] /*space=<[A, A, A, ...List<A>]>*/ => 3,
};
}
nonExhaustiveSealedCount(List<A> list) {
return /*
checkingOrder={List<A>,<A>[],<A>[()],<A>[(), ()],<A>[(), (), (), ...]},
error=non-exhaustive:[_, _],
subtypes={<A>[],<A>[()],<A>[(), ()],<A>[(), (), (), ...]},
type=List<A>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[_] /*space=<[A]>*/ => 1,
[_, _, _, ...] /*space=<[A, A, A, ...List<A>]>*/ => 3,
};
}
reachableRest(List<A> list) {
return /*
checkingOrder={List<A>,<A>[],<A>[()],<A>[(), (), ...]},
subtypes={<A>[],<A>[()],<A>[(), (), ...]},
type=List<A>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[B(), ...] /*space=<[B, ...List<A>]>*/ => 1,
[..., B()] /*space=<[...List<A>, B]>*/ => 2,
[C(), ...] /*space=<[C, ...List<A>]>*/ => 3,
[..., C()] /*
error=unreachable,
space=<[...List<A>, C]>
*/
=>
4,
};
}
nonExhaustiveSubtype(List<Object> list) {
return /*
checkingOrder={List<Object>,<Object>[],<Object>[()],<Object>[(), ()],<Object>[(), (), (), ...]},
error=non-exhaustive:[Object(), Object()]/[_, _],
subtypes={<Object>[],<Object>[()],<Object>[(), ()],<Object>[(), (), (), ...]},
type=List<Object>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[_] /*space=<[Object]>*/ => 1,
[_, String()] /*space=<[Object, String]>*/ => 2,
[_, _, _, ...] /*space=<[Object, Object, Object, ...List<Object>]>*/ => 3,
};
}
nonExhaustiveCount(List<Object> list) {
return /*
checkingOrder={List<Object>,<Object>[],<Object>[()],<Object>[(), ()],<Object>[(), (), (), ...]},
error=non-exhaustive:[_, _],
subtypes={<Object>[],<Object>[()],<Object>[(), ()],<Object>[(), (), (), ...]},
type=List<Object>
*/
switch (list) {
[] /*space=<[]>*/ => 0,
[_] /*space=<[Object]>*/ => 1,
[_, _, _, ...] /*space=<[Object, Object, Object, ...List<Object>]>*/ => 3,
};
}