blob: e419377a30160aa1b93865dff0a84d9d00b6060d [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 {
B field1;
B field2;
A(this.field1, this.field2);
}
sealed class B {}
class C extends B {}
class D extends B {}
class E extends B {}
and(A o1, A o2) {
var a = /*type=A*/switch (o1) {
A() && var a /*space=A*/=> 0,
_ /*space=()*/=> 1,
};
var b = /*type=A*/switch (o1) {
A() && var a /*space=A*/=> 0,
};
}
intersectSameClass(A o1, A o2, A o3) {
var a = /*type=A*/switch (o1) {
A() && A() /*space=A*/=> 0,
};
var b = /*
fields={field1:B,field2:B},
type=A
*/switch (o2) {
A(:var field1) && A(:var field2) /*space=A(field1: B, field2: B)*/=> [field1, field2],
};
var c = /*
error=non-exhaustive:A(field1: C, field2: C),
fields={field1:B,field2:B},
type=A
*/switch (o3) {
A(:var field1, field2: C()) && A(field1: D(), :var field2) /*space=A(field1: D, field2: C)*/=> 10,
};
}
intersectSubClass(A o1, A o2, A o3) {
var a = /*type=A*/switch (o1) {
Object() && A() /*space=A*/=> 0,
};
var b = /*
fields={field1:B,hashCode:int},
type=A
*/switch (o2) {
A(:var field1) && Object(:var hashCode) /*space=A(field1: B, hashCode: int)*/=> [field1, hashCode],
};
var c = /*
error=non-exhaustive:A(field1: C, field2: C, hashCode: int),
fields={field1:B,field2:B,hashCode:int},
type=A
*/switch (o3) {
Object(:var hashCode) && A(:var field1, field2: D())/*space=A(hashCode: int, field1: B, field2: D)*/=> 10,
};
}
intersectUnion(A o1, A o2, B o3, B o4) {
var a = /*
fields={field1:B,field2:B},
type=A
*/switch (o1) {
A(field1: C() || D()) && A(field2: C() || D()) /*space=A(field1: C|D, field2: C|D)*/=> 0,
A(field1: C() || E()) && A(field2: C() || E()) /*space=A(field1: C|E, field2: C|E)*/=> 1,
A(field1: D() || E()) && A(field2: D() || E()) /*space=A(field1: D|E, field2: D|E)*/=> 2,
};
var b = /*
fields={field1:B},
type=A
*/switch (o2) {
A(field1: C() || D()) && A(field1: D() || E()) /*space=A(field1: D|??)*/=> 0,
A(field1: C() || E()) && A(field1: C() || E()) /*space=A(field1: C|E|??)*/=> 1,
};
var c = /*
subtypes={C,D,E},
type=B
*/switch (o3) {
(C() || D()) && B() /*space=C|D*/=> 0,
B() && (D() || E()) /*space=D|E*/= 1,
};
var d = /*
subtypes={C,D,E},
type=B
*/switch (o3) {
(C() || D() || E()) && (C() || D() || E()) /*space=C|D|E|??*/=> 0,
};
}