xshade_parser/ast/expressions/
mod.rs1use ::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}