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