xshade_parser/ast/expressions/
mod.rs

1use ::ast::*;
2
3pub mod binary_expression;
4pub mod call_expression;
5pub mod field_accessor_expression;
6pub mod index_accessor_expression;
7pub mod literal_expression;
8pub mod struct_field_initializer_expression;
9pub mod struct_instantiation_expression;
10pub mod unary_expression;
11pub mod variable_expression;
12
13pub use self::binary_expression::*;
14pub use self::call_expression::*;
15pub use self::field_accessor_expression::*;
16pub use self::index_accessor_expression::*;
17pub use self::literal_expression::*;
18pub use self::struct_field_initializer_expression::*;
19pub use self::struct_instantiation_expression::*;
20pub use self::unary_expression::*;
21pub use self::variable_expression::*;
22
23pub trait Execute {
24    fn execute(&self) -> Option<i32>;
25}
26
27#[derive(Debug, Eq, PartialEq, Serialize, Deserialize)]
28pub enum Expression {
29    Binary(BinaryExpression),
30    Literal(LiteralExpression),
31    Call(CallExpression),
32    StructInstantiation(StructInstantiationExpression),
33    FieldAccessor(FieldAccessorExpression),
34    IndexAccessor(IndexAccesorExpression),
35    Unary(UnaryExpression),
36    Variable(VariableExpression),
37}
38
39impl Execute for Expression {
40    fn execute(&self) -> Option<i32> {
41        match *self {
42            Expression::Binary(ref expression) => expression.execute(),
43            Expression::Literal(ref expression) => expression.execute(),
44            Expression::Call(ref expression) => expression.execute(),
45            Expression::StructInstantiation(ref expression) => expression.execute(),
46            Expression::FieldAccessor(ref expression) => expression.execute(),
47            Expression::IndexAccessor(ref expression) => expression.execute(),
48            Expression::Unary(ref expression) => expression.execute(),
49            Expression::Variable(ref expression) => expression.execute(),
50        }
51    }
52}
53
54impl Spanned for Expression {
55    fn get_span(&self) -> Span {
56        match *self {
57            Expression::Binary(ref expression) => expression.span,
58            Expression::Literal(ref expression) => expression.span,
59            Expression::Call(ref expression) => expression.span,
60            Expression::StructInstantiation(ref expression) => expression.span,
61            Expression::FieldAccessor(ref expression) => expression.span,
62            Expression::IndexAccessor(ref expression) => expression.span,
63            Expression::Unary(ref expression) => expression.span,
64            Expression::Variable(ref expression) => expression.span,
65        }
66    }
67}