mxmlextrema_as3parser/tree/
switch_statement.rs1use crate::ns::*;
2use serde::{Serialize, Deserialize};
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct SwitchStatement {
6 pub location: Location,
7 pub discriminant: Rc<Expression>,
8 pub cases: Vec<Case>,
9}
10
11#[derive(Debug, Clone, Serialize, Deserialize)]
12pub struct Case {
13 pub location: Location,
14 pub labels: Vec<CaseLabel>,
15 pub directives: Vec<Rc<Directive>>,
16}
17
18#[derive(Debug, Clone, Serialize, Deserialize)]
19pub enum CaseLabel {
20 Case((Rc<Expression>, Location)),
21 Default(Location),
22}
23
24impl CaseLabel {
25 pub fn location(&self) -> Location {
26 match self {
27 Self::Case((_, l)) => l.clone(),
28 Self::Default(l) => l.clone(),
29 }
30 }
31}
32
33#[derive(Debug, Clone, Serialize, Deserialize)]
34pub struct SwitchTypeStatement {
35 pub location: Location,
36 pub discriminant: Rc<Expression>,
37 pub cases: Vec<TypeCase>,
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize)]
41pub struct TypeCase {
42 pub location: Location,
43 pub parameter: Option<TypedDestructuring>,
45 pub block: Rc<Block>,
46}