| // Copyright (c) 2026, 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. |
| |
| part of '../control.dart'; |
| |
| /// A case within a [SwitchStatement]. |
| /// |
| /// ```dart |
| /// case pattern when guard: |
| /// body; |
| /// ``` |
| abstract class CaseStatement |
| implements Built<CaseStatement, CaseStatementBuilder> { |
| factory CaseStatement([void Function(CaseStatementBuilder) updates]) = |
| _$CaseStatement; |
| |
| CaseStatement._(); |
| |
| /// An optional label for this case. |
| String? get label; |
| |
| /// The pattern to match against. |
| Pattern get pattern; |
| |
| /// The optional guard (`when`) expression. |
| Expression? get guard; |
| |
| /// The body of this case. |
| /// |
| /// May be `null` to represent case fall-through. |
| Code? get body; |
| } |
| |
| abstract class CaseStatementBuilder |
| implements Builder<CaseStatement, CaseStatementBuilder> { |
| factory CaseStatementBuilder() = _$CaseStatementBuilder; |
| CaseStatementBuilder._(); |
| |
| String? label; |
| Pattern? pattern; |
| Expression? guard; |
| Code? body; |
| } |
| |
| /// A `switch` statement. |
| /// |
| /// ```dart |
| /// switch (value) { |
| /// case 1: |
| /// case 2: |
| /// body; |
| /// default: |
| /// defaultBody; |
| /// } |
| /// ``` |
| abstract class SwitchStatement |
| implements Built<SwitchStatement, SwitchStatementBuilder>, Code, Spec { |
| factory SwitchStatement([void Function(SwitchStatementBuilder) updates]) = |
| _$SwitchStatement; |
| |
| SwitchStatement._(); |
| |
| /// An optional label for the switch statement. |
| String? get label; |
| |
| /// The value being matched against. |
| Expression get value; |
| |
| /// The cases in the switch statement. |
| BuiltList<CaseStatement> get cases; |
| |
| /// The optional `default:` body. |
| Code? get defaultCase; |
| |
| @override |
| R accept<R>(covariant ControlVisitor<R> visitor, [R? context]) => |
| visitor.visitSwitchStatement(this, context); |
| } |
| |
| abstract class SwitchStatementBuilder |
| implements Builder<SwitchStatement, SwitchStatementBuilder> { |
| factory SwitchStatementBuilder() = _$SwitchStatementBuilder; |
| SwitchStatementBuilder._(); |
| |
| String? label; |
| Expression? value; |
| ListBuilder<CaseStatement> cases = ListBuilder<CaseStatement>(); |
| Code? defaultCase; |
| } |
| |
| /// A case within a [SwitchExpression]. |
| /// |
| /// ```dart |
| /// pattern when guard => body, |
| /// ``` |
| abstract class CaseExpression |
| implements Built<CaseExpression, CaseExpressionBuilder> { |
| factory CaseExpression([void Function(CaseExpressionBuilder) updates]) = |
| _$CaseExpression; |
| |
| CaseExpression._(); |
| |
| /// The pattern to match against. |
| Pattern get pattern; |
| |
| /// The optional guard (`when`) expression. |
| Expression? get guard; |
| |
| /// The expression to evaluate when matched. |
| Expression get body; |
| } |
| |
| abstract class CaseExpressionBuilder |
| implements Builder<CaseExpression, CaseExpressionBuilder> { |
| factory CaseExpressionBuilder() = _$CaseExpressionBuilder; |
| CaseExpressionBuilder._(); |
| |
| Pattern? pattern; |
| Expression? guard; |
| Expression? body; |
| } |
| |
| /// A `switch` expression. |
| /// |
| /// ```dart |
| /// final x = switch (value) { |
| /// 1 => 'one', |
| /// _ => 'other', |
| /// }; |
| /// ``` |
| abstract class SwitchExpression extends Expression |
| implements Built<SwitchExpression, SwitchExpressionBuilder> { |
| factory SwitchExpression([void Function(SwitchExpressionBuilder) updates]) = |
| _$SwitchExpression; |
| |
| SwitchExpression._(); |
| |
| /// The value being matched against. |
| Expression get value; |
| |
| /// The cases in the switch expression. |
| BuiltList<CaseExpression> get cases; |
| |
| @override |
| R accept<R>(covariant ExpressionVisitor<R> visitor, [R? context]) => |
| (visitor as ControlVisitor<R>).visitSwitchExpression(this, context); |
| } |
| |
| abstract class SwitchExpressionBuilder |
| implements Builder<SwitchExpression, SwitchExpressionBuilder> { |
| factory SwitchExpressionBuilder() = _$SwitchExpressionBuilder; |
| SwitchExpressionBuilder._(); |
| |
| Expression? value; |
| ListBuilder<CaseExpression> cases = ListBuilder<CaseExpression>(); |
| } |