Skip to main content

mago_syntax/ast/ast/loop/
do_while.rs

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