1use serde::Deserialize;
2use serde::Serialize;
3
4use mago_span::HasSpan;
5use mago_span::Span;
6
7use crate::ast::expression::Expression;
8use crate::ast::keyword::Keyword;
9use crate::ast::terminator::Terminator;
10
11pub mod do_while;
12pub mod r#for;
13pub mod foreach;
14pub mod r#while;
15
16#[derive(Debug, Clone, Eq, PartialEq, Hash, Serialize, Deserialize, PartialOrd, Ord)]
30#[repr(C)]
31pub struct Continue {
32 pub r#continue: Keyword,
33 pub level: Option<Expression>,
34 pub terminator: Terminator,
35}
36
37#[derive(Debug, Clone, Eq, PartialEq, Hash, Serialize, Deserialize, PartialOrd, Ord)]
51#[repr(C)]
52pub struct Break {
53 pub r#break: Keyword,
54 pub level: Option<Expression>,
55 pub terminator: Terminator,
56}
57
58impl HasSpan for Continue {
59 fn span(&self) -> Span {
60 self.r#continue.span().join(self.terminator.span())
61 }
62}
63
64impl HasSpan for Break {
65 fn span(&self) -> Span {
66 self.r#break.span().join(self.terminator.span())
67 }
68}