// 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. abstract class A { B get b; int get i; } abstract class B { C get c; int get i; } abstract class C { int get i; } ifCase(o) { if (o case A a) { print(a); } if (o case A(:var b)) { print(b); } if (o case A(b: B(:var c))) { print(c); } if (o case A(b: B(c: C(:var i)))) { print(i); } if (o case A(:var b, :var i)) { print(b); print(i); } if (o case A(i: 5, :var b)) { print(b); } if (o case A(:var b, i: 5)) { print(b); } if (o case A(:var b, i: 5) && A(b: B(:var c, i: 7))) { print(b); print(c); } } switchExpression(o) => switch (o) { A a => a, A(:var b) => b, A(b: B(:var c)) => c, A(b: B(c: C(:var i))) => i, A(:var b, :var i) => '$b$i', A(i: 5, :var b) => b, A(:var b, i: 5) => b, A(:var b, i: 5) && A(b: B(:var c, i: 7)) => '$b$c', _ => null, }; switchStatement(o) { dynamic v; switch (o) { case A a: v = a; case A(:var b): v = b; case A(b: B(:var c)): v = c; case A(b: B(c: C(:var i))): v = i; case A(:var b, :var i): v = '$b$i'; case A(i: 5, :var b): v = b; case A(:var b, i: 5): v = b; case A(:var b, i: 5) && A(b: B(:var c, i: 7)): v = '$b$c'; } return v; }