yulang-runtime-refine 0.1.0

Runtime type refinement, validation, invariant checks, and hygiene printing for Yulang.
Documentation
use super::*;

impl RefineRewriter {
    pub(super) fn stmt(&mut self, stmt: Stmt) -> Stmt {
        match stmt {
            Stmt::Let { pattern, value } => {
                let pattern = self.pattern(pattern);
                let expected = pattern_type(&pattern);
                Stmt::Let {
                    pattern,
                    value: self.expr(value, expected.as_ref()),
                }
            }
            Stmt::Expr(expr) => Stmt::Expr(self.expr(expr, None)),
            Stmt::Module { def, body } => {
                let body_ty = substitute_hir_type(&body.ty, &self.substitutions);
                let previous = push_binding(&mut self.locals, def.clone(), body_ty.clone());
                let body = self.expr(body, Some(&body_ty));
                pop_bindings(&mut self.locals, previous);
                Stmt::Module { def, body }
            }
        }
    }
}