mago_ast/ast/loop/
mod.rs

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/// Represents a continue statement in PHP.
17///
18/// Example:
19///
20/// ```php
21/// <?php
22///
23/// for ($i = 0; $i < 10; $i++) {
24///   if ($i === 5) {
25///     continue;
26///   }
27/// }
28/// ```
29#[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/// Represents a break statement in PHP.
38///
39/// Example:
40///
41/// ```php
42/// <?php
43///
44/// for ($i = 0; $i < 10; $i++) {
45///   if ($i === 5) {
46///     break;
47///   }
48/// }
49/// ```
50#[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}