pomsky 0.12.0

A new regular expression language
Documentation
use pomsky_syntax::exprs::{Stmt, StmtExpr};

use crate::{
    compile::{CompileResult, CompileState},
    options::CompileOptions,
};

use super::Compile;

impl Compile for StmtExpr {
    fn compile<'c>(
        &'c self,
        options: CompileOptions,
        state: &mut CompileState<'c>,
    ) -> CompileResult {
        match &self.stmt {
            Stmt::Enable(..) | Stmt::Disable(..) => self.rule.compile(options, state),
            Stmt::Let(r#let) => {
                state.variables.push((&r#let.name, &r#let.rule));
                let res = self.rule.compile(options, state)?;
                state.variables.pop();
                Ok(res)
            }
            Stmt::Test(_) => self.rule.compile(options, state),
        }
    }
}