blob: b123f876b203873411f840f19dccb3bb3899a31e [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.
untypedMap(Map map) {
var a = /*
fields={isEmpty:bool},
type=Map<dynamic, dynamic>
*/ switch (map) {
Map(isEmpty: true) /*space=Map<dynamic, dynamic>(isEmpty: true)*/ => 0,
{1: _, 2: _, 3: _} /*space={1: (), 2: (), 3: ()}*/ => 3,
{1: _, 2: _} /*space={1: (), 2: ()}*/ => 2,
{1: _} /*space={1: ()}*/ => 1,
Map() /*space=Map<dynamic, dynamic>*/ => 4,
};
var b = /*type=Map<dynamic, dynamic>*/ switch (map) {
Map() /*space=Map<dynamic, dynamic>*/ => 0,
};
}
sealed class A {}
class B extends A {}
class C extends A {}
extension type ExtensionTypeMap<K, V>(Map<K, V> it) implements Map<K, V> {
V method(K key) => it[key]!;
V get getter => it.values.first;
void genericMethod<T>(K key, V value, void Function(T) f) {}
}
typedMap(Map<int, A> map) {
var a = /*
error=non-exhaustive:Map<int, A>(isEmpty: false),
fields={isEmpty:bool},
type=Map<int, A>
*/ switch (map) {
Map(isEmpty: true) /*space=Map<int, A>(isEmpty: true)*/ => 0,
{0: B b, 1: _} /*space={0: B, 1: A}*/ => 4,
{0: C c, 1: _} /*space={0: C, 1: A}*/ => 5,
{0: _, 1: _} /*
error=unreachable,
space={0: A, 1: A}
*/ =>
3,
{0: B b} /*space={0: B}*/ => 1,
{0: C c} /*space={0: C}*/ => 2,
};
var b = /*type=Map<int, A>*/ switch (map) {
Map() /*space=Map<int, A>*/ => 0,
};
var c = /*
error=non-exhaustive:Map<int, A>(),
type=Map<int, A>
*/ switch (map) {
Map<int, B>() /*space=Map<int, B>*/ => 0,
};
var d = /*type=Map<int, B>*/ switch (map) {
Map() /*space=Map<int, B>*/ => 0,
{1: _} /*
error=unreachable,
space={1: B}
*/ =>
1,
{2: _} /*
error=unreachable,
space={2: B}
*/ =>
2,
};
}
typedMapExtensionType(ExtensionTypeMap<int, A> map) {
var a = /*
error=non-exhaustive:Map<int, A>(isEmpty: false),
fields={isEmpty:bool},
type=Map<int, A>
*/ switch (map) {
Map(isEmpty: true) /*space=Map<int, A>(isEmpty: true)*/ => 0,
{0: B b, 1: _} /*space={0: B, 1: A}*/ => 4,
{0: C c, 1: _} /*space={0: C, 1: A}*/ => 5,
{0: _, 1: _} /*
error=unreachable,
space={0: A, 1: A}
*/ =>
3,
{0: B b} /*space={0: B}*/ => 1,
{0: C c} /*space={0: C}*/ => 2,
};
var b = /*type=Map<int, A>*/ switch (map) {
Map() /*space=Map<int, A>*/ => 0,
};
var c = /*
error=non-exhaustive:Map<int, A>(),
type=Map<int, A>
*/ switch (map) {
Map<int, B>() /*space=Map<int, B>*/ => 0,
};
var d = /*type=Map<int, A>*/ switch (map) {
Map() /*space=Map<int, A>*/ => 0,
{1: _} /*
error=unreachable,
space={1: A}
*/ =>
1,
{2: _} /*
error=unreachable,
space={2: A}
*/ =>
2,
};
}
exhaustiveRestOnly(Map o) {
return /*type=Map<dynamic, dynamic>*/ switch (o) {
Map() /*space=Map<dynamic, dynamic>*/ => 0,
};
}
unreachableAfterRestOnly(Map o) {
return /*type=Map<dynamic, dynamic>*/ switch (o) {
Map() /*space=Map<dynamic, dynamic>*/ => 0,
{0: _} /*
error=unreachable,
space={0: ()}
*/ =>
1,
};
}
unreachableAfterRestOnlyTyped(Map o) {
return /*type=Map<dynamic, dynamic>*/ switch (o) {
Map() /*space=Map<dynamic, dynamic>*/ => 0,
<int, String>{0: _} /*
error=unreachable,
space=<int, String>{0: String}
*/ =>
1,
};
}
unreachableAfterRestOnlyEmpty(Map o) {
return /*
fields={isEmpty:bool},
type=Map<dynamic, dynamic>
*/ switch (o) {
Map() /*space=Map<dynamic, dynamic>*/ => 0,
Map(isEmpty: true) /*
error=unreachable,
space=Map<dynamic, dynamic>(isEmpty: true)
*/ =>
1,
};
}
unreachableAfterRestSameKeys(Map o) {
return /*type=Map<dynamic, dynamic>*/ switch (o) {
{0: _} /*space={0: ()}*/ => 0,
{0: _} /*
error=unreachable,
space={0: ()}
*/ =>
1,
Map() /*space=Map<dynamic, dynamic>*/ => 2,
};
}
nonExhaustiveAfterRestSameKeys(Map o) {
return /*
error=non-exhaustive:Map<dynamic, dynamic>(),
type=Map<dynamic, dynamic>
*/ switch (o) {
{0: _} /*space={0: ()}*/ => 0,
{0: _} /*
error=unreachable,
space={0: ()}
*/ =>
1,
};
}
unreachableAfterRestMoreKeys(Map o) {
return /*type=Map<dynamic, dynamic>*/ switch (o) {
{0: _} /*space={0: ()}*/ => 0,
{0: _, 1: _} /*
error=unreachable,
space={0: (), 1: ()}
*/ =>
1,
Map() /*space=Map<dynamic, dynamic>*/ => 2,
};
}
nonExhaustiveAfterRestMoreKeys(Map o) {
return /*
error=non-exhaustive:Map<dynamic, dynamic>(),
type=Map<dynamic, dynamic>
*/ switch (o) {
{0: _} /*space={0: ()}*/ => 0,
{0: _, 1: _} /*
error=unreachable,
space={0: (), 1: ()}
*/ =>
1,
};
}
unreachableAfterSameKeys(Map o) {
return /*type=Map<dynamic, dynamic>*/ switch (o) {
{0: _} /*space={0: ()}*/ => 0,
{0: 1} /*
error=unreachable,
space={0: 1}
*/ =>
1,
Map() /*space=Map<dynamic, dynamic>*/ => 2,
};
}
nonExhaustiveAfterSameKeys(Map o) {
return /*
error=non-exhaustive:Map<dynamic, dynamic>(),
type=Map<dynamic, dynamic>
*/ switch (o) {
{0: _} /*space={0: ()}*/ => 0,
{0: 1} /*
error=unreachable,
space={0: 1}
*/ =>
1,
};
}
reachableAfterRestOnlyDifferentTypes(Map o) {
return /*type=Map<dynamic, dynamic>*/ switch (o) {
Map<int, String>() /*space=Map<int, String>*/ => 0,
<int, bool>{0: _} /*space=<int, bool>{0: bool}*/ => 1,
Map() /*space=Map<dynamic, dynamic>*/ => 2,
};
}
nonExhaustiveAfterRestOnlyDifferentTypes(Map o) {
return /*
error=non-exhaustive:Map<dynamic, dynamic>(),
type=Map<dynamic, dynamic>
*/ switch (o) {
Map<int, String>() /*space=Map<int, String>*/ => 0,
<int, bool>{0: _} /*space=<int, bool>{0: bool}*/ => 1,
};
}
reachableAfterRestOnlyEmptyDifferentTypes(Map o) {
return /*
fields={isEmpty:bool},
type=Map<dynamic, dynamic>
*/ switch (o) {
Map<int, String>() /*space=Map<int, String>*/ => 0,
Map<int, bool>(isEmpty: true) /*space=Map<int, bool>(isEmpty: true)*/ => 1,
Map() /*space=Map<dynamic, dynamic>*/ => 2,
};
}
nonExhaustiveAfterRestOnlyEmptyDifferentTypes(Map o) {
return /*
error=non-exhaustive:Map<dynamic, dynamic>(),
fields={isEmpty:bool},
type=Map<dynamic, dynamic>
*/ switch (o) {
Map<int, String>() /*space=Map<int, String>*/ => 0,
Map<int, bool>(isEmpty: true) /*space=Map<int, bool>(isEmpty: true)*/ => 1,
};
}
reachableAfterRestDifferentTypes(Map o) {
return /*type=Map<dynamic, dynamic>*/ switch (o) {
<int, String>{0: _} /*space=<int, String>{0: String}*/ => 0,
<int, bool>{0: _} /*space=<int, bool>{0: bool}*/ => 1,
Map() /*space=Map<dynamic, dynamic>*/ => 2,
};
}
nonExhaustiveAfterRestDifferentTypes(Map o) {
return /*type=Map<dynamic, dynamic>*/ switch (o) {
<int, String>{0: _} /*space=<int, String>{0: String}*/ => 0,
<int, bool>{0: _} /*space=<int, bool>{0: bool}*/ => 1,
Map() /*space=Map<dynamic, dynamic>*/ => 2,
};
}
reachableAfterRestDifferentKeys(Map o) {
return /*type=Map<dynamic, dynamic>*/ switch (o) {
{0: _} /*space={0: ()}*/ => 0,
{1: _} /*space={1: ()}*/ => 1,
Map() /*space=Map<dynamic, dynamic>*/ => 2,
};
}
nonExhaustiveAfterRestDifferentKeys(Map o) {
return /*
error=non-exhaustive:Map<dynamic, dynamic>(),
type=Map<dynamic, dynamic>
*/ switch (o) {
{0: _} /*space={0: ()}*/ => 0,
{1: _} /*space={1: ()}*/ => 1,
};
}
reachableAfterDifferentKeys(Map o) {
return /*type=Map<dynamic, dynamic>*/ switch (o) {
{0: _} /*space={0: ()}*/ => 0,
{1: _} /*space={1: ()}*/ => 1,
Map() /*space=Map<dynamic, dynamic>*/ => 2,
};
}
nonExhaustiveAfterDifferentKeys(Map o) {
return /*
error=non-exhaustive:Map<dynamic, dynamic>(),
type=Map<dynamic, dynamic>
*/ switch (o) {
{0: _} /*space={0: ()}*/ => 0,
{1: _} /*space={1: ()}*/ => 1,
};
}
reachableAfterDifferentTypes(Map o) {
return /*type=Map<dynamic, dynamic>*/ switch (o) {
<int, String>{0: _} /*space=<int, String>{0: String}*/ => 0,
<int, bool>{0: _} /*space=<int, bool>{0: bool}*/ => 1,
Map() /*space=Map<dynamic, dynamic>*/ => 2,
};
}
nonExhaustiveAfterDifferentTypes(Map o) {
return /*
error=non-exhaustive:Map<dynamic, dynamic>(),
type=Map<dynamic, dynamic>
*/ switch (o) {
<int, String>{0: _} /*space=<int, String>{0: String}*/ => 0,
<int, bool>{0: _} /*space=<int, bool>{0: bool}*/ => 1,
};
}
exhaustiveMapExtensionType(ExtensionTypeMap<int, A> map) {
return /*
fields={isEmpty:bool},
type=Map<int, A>
*/ switch (map) {
Map(isEmpty: true) /*space=Map<int, A>(isEmpty: true)*/ => 0,
Map(isEmpty: false) /*space=Map<int, A>(isEmpty: false)*/ => 0,
};
}
exhaustiveMapMethod(ExtensionTypeMap<int, A> map) {
return /*
fields={Map<int, A>.method:A Function(int)},
type=Map<int, A>
*/ switch (map) {
ExtensionTypeMap(
:A Function(int) method,
) /*space=Map<int, A>(Map<int, A>.method: A Function(int) (A Function(int)))*/ =>
0,
};
}
nonExhaustiveMapMethod(ExtensionTypeMap<int, A> map) {
return /*
error=non-exhaustive:Map<int, A>(method: A Function(int) _)/Map<int, A>(),
fields={Map<int, A>.method:A Function(int)},
type=Map<int, A>
*/ switch (map) {
ExtensionTypeMap(
:B Function(int) method,
) /*space=Map<int, A>(Map<int, A>.method: B Function(int) (A Function(int)))*/ =>
0,
};
}
exhaustiveMapGetter(ExtensionTypeMap<int, A> map) {
return /*
fields={Map<int, A>.getter:A},
type=Map<int, A>
*/ switch (map) {
ExtensionTypeMap(
:B getter,
) /*space=Map<int, A>(Map<int, A>.getter: B (A))*/ =>
0,
ExtensionTypeMap(
:C getter,
) /*space=Map<int, A>(Map<int, A>.getter: C (A))*/ =>
0,
};
}
nonExhaustiveMapGetter(ExtensionTypeMap<int, A> map) {
return /*
error=non-exhaustive:Map<int, A>(getter: C()),
fields={Map<int, A>.getter:A},
type=Map<int, A>
*/ switch (map) {
ExtensionTypeMap(
:B getter,
) /*space=Map<int, A>(Map<int, A>.getter: B (A))*/ =>
0,
};
}
exhaustiveMapGenericMethod(ExtensionTypeMap<int, A> map) {
return /*
fields={Map<int, A>.genericMethod:void Function<T>(int, A, void Function(T))},
type=Map<int, A>
*/ switch (map) {
ExtensionTypeMap(
:void Function<X>(int, A, void Function(X)) genericMethod,
) /*space=Map<int, A>(Map<int, A>.genericMethod: void Function<T>(int, A, void Function(T)) (void Function<T>(int, A, void Function(T))))*/ =>
0,
};
}
nonExhaustiveMapGenericMethod(ExtensionTypeMap<int, A> map) {
return /*
fields={Map<int, A>.genericMethod:void Function<T>(int, A, void Function(T))},
type=Map<int, A>
*/ switch (map) {
ExtensionTypeMap(:void Function<X>(int, B, void Function(X)) genericMethod)
/*space=Map<int, A>(Map<int, A>.genericMethod: void Function<T>(int, A, void Function(T)) (void Function<T>(int, A, void Function(T))))*/
=> 0,
};
}
exhaustiveMapField(ExtensionTypeMap<int, A> map) {
return /*
fields={Map<int, A>.it:Map<int, A>},
type=Map<int, A>
*/ switch (map) {
ExtensionTypeMap(
:Map<int, A> it,
) /*space=Map<int, A>(Map<int, A>.it: Map<int, A> (Map<int, A>))*/ =>
0,
};
}
nonExhaustiveMapField(ExtensionTypeMap<int, A> map) {
return /*
error=non-exhaustive:Map<int, A>(it: Map<int, A>())/Map<int, A>(),
fields={Map<int, A>.it:Map<int, A>},
type=Map<int, A>
*/ switch (map) {
ExtensionTypeMap(
:Map<int, B> it,
) /*space=Map<int, A>(Map<int, A>.it: Map<int, B> (Map<int, A>))*/ =>
0,
};
}