blob: e108923e21d42d98d5c564c4d4543741d942cc1b [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.
class A {
int field;
A(this.field);
}
sealed class B {}
class C extends B {}
class D extends B {}
simpleAssert(o1, o2) {
var a = /*
checkingOrder={Object?,Object,Null},
subtypes={Object,Null},
type=Object?
*/
switch (o1) {
_! /*space=()*/ => 0,
_ /*
error=unreachable,
space=()
*/
=>
1
};
var b = /*
checkingOrder={Object?,Object,Null},
subtypes={Object,Null},
type=Object?
*/
switch (o2) {
_! /*space=()*/ => 0,
};
}
restrictedCase(o1, o2) {
// Null assert shouldn't match everything, because even though it doesn't
// throw, it might not match.
var a = /*
checkingOrder={Object?,Object,Null},
fields={field:-},
subtypes={Object,Null},
type=Object?
*/
switch (o1) {
A(field: 42)! /*space=A(field: 42)|Null*/ => 0,
_ /*space=()*/ => 1
};
var b = /*
checkingOrder={Object?,Object,Null},
error=non-exhaustive:Object(),
fields={field:-},
subtypes={Object,Null},
type=Object?
*/
switch (o2) {
A(field: 42)! /*space=A(field: 42)|Null*/ => 0,
};
}
nullableBool(bool? b1, bool? b2) {
/*
checkingOrder={bool?,bool,Null,true,false},
expandedSubtypes={true,false,Null},
subtypes={bool,Null},
type=bool?
*/
switch (b1) {
/*space=true?*/
case true!:
break;
/*space=false*/
case false:
break;
}
/*
checkingOrder={bool?,bool,Null,true,false},
error=non-exhaustive:false,
expandedSubtypes={true,false,Null},
subtypes={bool,Null},
type=bool?
*/
switch (b2) {
/*space=true?*/
case true!:
break;
}
}
nullableA(A? a1, A? a2, A? a3) {
var a = /*
checkingOrder={A?,A,Null},
subtypes={A,Null},
type=A?
*/
switch (a1) {
A()! /*space=A?*/ => 0,
};
var b = /*
checkingOrder={A?,A,Null},
fields={field:-},
subtypes={A,Null},
type=A?
*/
switch (a2) {
A(:var field)! /*space=A(field: int)|Null*/ => 0,
};
var c = /*
checkingOrder={A?,A,Null},
error=non-exhaustive:A(field: int())/A(),
fields={field:-},
subtypes={A,Null},
type=A?
*/
switch (a3) {
A(field: 42)!
/*space=A(field: 42)|Null*/
=>
0,
};
}
nullableB(B? b1, B? b2, B? b3) {
/*
checkingOrder={B?,B,Null,C,D},
expandedSubtypes={C,D,Null},
subtypes={B,Null},
type=B?
*/
switch (b1) {
/*space=B?*/
case B()!:
break;
}
/*
checkingOrder={B?,B,Null,C,D},
expandedSubtypes={C,D,Null},
subtypes={B,Null},
type=B?
*/
switch (b2) {
/*space=C?*/
case C()!:
break;
/*space=D*/
case D():
break;
}
/*
checkingOrder={B?,B,Null,C,D},
error=non-exhaustive:D(),
expandedSubtypes={C,D,Null},
subtypes={B,Null},
type=B?
*/
switch (b3) {
/*space=C?*/
case C()!:
break;
}
}