use crate::ast::visitors::prelude::*;
pub(crate) struct IsConstFn {
is_const: bool,
}
impl Default for IsConstFn {
fn default() -> Self {
Self { is_const: true }
}
}
impl IsConstFn {
pub(crate) fn is_const(es: &mut Exprs) -> Result<bool> {
let mut walker = Self::default();
for e in es {
walkers::expr::Walker::walk_expr(&mut walker, e)?;
}
Ok(walker.is_const)
}
}
impl<'script> walkers::imut_expr::Walker<'script> for IsConstFn {}
impl<'script> visitors::imut_expr::Visitor<'script> for IsConstFn {
fn visit_invoke(&mut self, invoke: &mut Invoke<'script>) -> Result<VisitRes> {
self.is_const |= invoke.invocable.is_const();
Ok(VisitRes::Walk)
}
}
impl<'script> walkers::expr::Walker<'script> for IsConstFn {}
impl<'script> visitors::expr::Visitor<'script> for IsConstFn {}