1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
use crate::Class;
use crate::Else;
use crate::Expression;
use crate::Function;
use crate::If;
use crate::Property;

use serde::Serialize;

#[derive(Serialize, Debug, Clone, PartialEq)]
pub enum Statement {
    OpenTag,
    Break,
    Continue(Option<Expression>),
    DocBlock(String),
    Echo(Expression),
    Return(Expression),
    Expression(Expression),
    Function(Function),
    Class(Class),
    Property(Property),
    If(If),
    ElseIf(If),
    Else(Else),
    While {
        condition: Expression,
        body: Vec<Statement>,
    },
    DoWhile {
        condition: Expression,
        body: Vec<Statement>
    },
    Foreach {
        expression: Expression,
        key_var: Option<Expression>,
        value_var: Expression,
        body: Vec<Statement>,
    },
    Use(Expression),
    UseTrait(Expression),
}