Skip to main content

gobject_ast/model/statement/
for_stmt.rs

1use serde::Serialize;
2
3use crate::model::{Expression, SourceLocation, Statement, VariableDecl};
4
5/// The initializer clause of a `for` statement.
6#[derive(Debug, Clone, Serialize)]
7pub enum ForInit {
8    /// Expression initializer: `for (i = 0; ...)`
9    Expr(Box<Expression>),
10    /// Declaration initializer: `for (int i = 0; ...)` or `for (GList *l =
11    /// list; ...)`
12    Decl(Box<VariableDecl>),
13}
14
15#[derive(Debug, Clone, Serialize)]
16pub struct ForStatement {
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub initializer: Option<ForInit>,
19    /// Condition expression
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub condition: Option<Box<Expression>>,
22    /// Update expression
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub update: Option<Box<Expression>>,
25    /// Loop body (can be single statement or compound)
26    #[serde(skip_serializing_if = "Vec::is_empty")]
27    pub body: Vec<Statement>,
28    pub location: SourceLocation,
29}