diff --git a/schala-lang/language/src/visitor.rs b/schala-lang/language/src/visitor.rs index 4b30da1..a258186 100644 --- a/schala-lang/language/src/visitor.rs +++ b/schala-lang/language/src/visitor.rs @@ -1,4 +1,13 @@ +use crate::ast::ExpressionKind; -pub trait ASTVisitor { - +pub trait ExpressionKindVisitor { + fn nat_literal(&mut self, n: u64) -> T; +} + +pub fn dispatch(input: &mut ExpressionKind, visitor: &mut dyn ExpressionKindVisitor) -> T { + use ExpressionKind::*; + match input { + NatLiteral(n) => visitor.nat_literal(*n), + _ => panic!() + } }