cas-compiler 0.2.0

Bytecode compiler for CalcScript programs
Documentation
mod assign;
mod binary;
mod block;
mod branch;
mod break_expr;
mod call;
mod continue_expr;
mod if_expr;
mod index;
mod literal;
mod loops;
mod product;
mod range;
mod return_expr;
mod stmt;
mod sum;
mod unary;

pub use stmt::compile_stmts;

use cas_error::Error;
use cas_parser::parser::ast::expr::Expr;
use crate::{Compile, Compiler};

impl Compile for Expr {
    fn compile(&self, compiler: &mut Compiler) -> Result<(), Error> {
        match self {
            Expr::Literal(literal) => literal.compile(compiler),
            Expr::Paren(paren) => paren.expr.compile(compiler),
            Expr::Block(block) => block.compile(compiler),
            Expr::Sum(sum) => sum.compile(compiler),
            Expr::Product(product) => product.compile(compiler),
            Expr::If(if_expr) => if_expr.compile(compiler),
            Expr::Loop(loop_expr) => loop_expr.compile(compiler),
            Expr::While(while_expr) => while_expr.compile(compiler),
            Expr::For(for_expr) => for_expr.compile(compiler),
            Expr::Then(then_expr) => then_expr.compile(compiler),
            Expr::Of(of_expr) => of_expr.compile(compiler),
            Expr::Break(break_expr) => break_expr.compile(compiler),
            Expr::Continue(continue_expr) => continue_expr.compile(compiler),
            Expr::Return(return_expr) => return_expr.compile(compiler),
            Expr::Call(call) => call.compile(compiler),
            Expr::Index(index) => index.compile(compiler),
            Expr::Unary(unary) => unary.compile(compiler),
            Expr::Binary(binary) => binary.compile(compiler),
            Expr::Assign(assign) => assign.compile(compiler),
            Expr::Range(range) => range.compile(compiler),
        }
    }
}