xshade-parser 0.1.2

Parser and untyped AST for the xshade language.
Documentation
use ::ast::*;

pub mod binary_expression;
pub mod call_expression;
pub mod field_accessor_expression;
pub mod index_accessor_expression;
pub mod literal_expression;
pub mod struct_field_initializer_expression;
pub mod struct_instantiation_expression;
pub mod unary_expression;
pub mod variable_expression;

pub use self::binary_expression::*;
pub use self::call_expression::*;
pub use self::field_accessor_expression::*;
pub use self::index_accessor_expression::*;
pub use self::literal_expression::*;
pub use self::struct_field_initializer_expression::*;
pub use self::struct_instantiation_expression::*;
pub use self::unary_expression::*;
pub use self::variable_expression::*;

pub trait Execute {
    fn execute(&self) -> Option<i32>;
}

#[derive(Debug, Eq, PartialEq, Serialize, Deserialize)]
pub enum Expression {
    Binary(BinaryExpression),
    Literal(LiteralExpression),
    Call(CallExpression),
    StructInstantiation(StructInstantiationExpression),
    FieldAccessor(FieldAccessorExpression),
    IndexAccessor(IndexAccesorExpression),
    Unary(UnaryExpression),
    Variable(VariableExpression),
}

impl Execute for Expression {
    fn execute(&self) -> Option<i32> {
        match *self {
            Expression::Binary(ref expression) => expression.execute(),
            Expression::Literal(ref expression) => expression.execute(),
            Expression::Call(ref expression) => expression.execute(),
            Expression::StructInstantiation(ref expression) => expression.execute(),
            Expression::FieldAccessor(ref expression) => expression.execute(),
            Expression::IndexAccessor(ref expression) => expression.execute(),
            Expression::Unary(ref expression) => expression.execute(),
            Expression::Variable(ref expression) => expression.execute(),
        }
    }
}

impl Spanned for Expression {
    fn get_span(&self) -> Span {
        match *self {
            Expression::Binary(ref expression) => expression.span,
            Expression::Literal(ref expression) => expression.span,
            Expression::Call(ref expression) => expression.span,
            Expression::StructInstantiation(ref expression) => expression.span,
            Expression::FieldAccessor(ref expression) => expression.span,
            Expression::IndexAccessor(ref expression) => expression.span,
            Expression::Unary(ref expression) => expression.span,
            Expression::Variable(ref expression) => expression.span,
        }
    }
}