| // 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; | |
| } |