mago_ast/ast/loop/
do_while.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::statement::Statement;
10use crate::ast::terminator::Terminator;
11
12/// Represents a do-while statement in PHP.
13///
14/// Example:
15///
16/// ```php
17/// <?php
18///
19/// $i = 0;
20/// do {
21///   echo $i;
22///   $i++;
23/// } while ($i < 10);
24/// ```
25#[derive(Debug, Clone, Eq, PartialEq, Hash, Serialize, Deserialize, PartialOrd, Ord)]
26#[repr(C)]
27pub struct DoWhile {
28    pub r#do: Keyword,
29    pub statement: Box<Statement>,
30    pub r#while: Keyword,
31    pub left_parenthesis: Span,
32    pub condition: Box<Expression>,
33    pub right_parenthesis: Span,
34    pub terminator: Terminator,
35}
36
37impl HasSpan for DoWhile {
38    fn span(&self) -> Span {
39        Span::between(self.r#do.span(), self.terminator.span())
40    }
41}