xbasic 0.3.2

A library that allows adding a scripting language onto your project with ease. This lets your users write their own arbitrary logic.
Documentation
use crate::expr::{BinaryExpr, CallExpr, ExprValue, LogicalExpr, UnaryExpr, VariableExpr};
use crate::stmt::{
	AssignStmt, BinaryAssignStmt, ExpressionStmt, ForStmt, IfStmt, InputStmt, PrintStmt,
	ReturnStmt, WhileStmt,
};

// TODO generate these with macros

pub(crate) trait StmtVisitor<U> {
	fn visit_expression_stmt(&mut self, stmt: &ExpressionStmt, line: usize) -> U;
	fn visit_print_stmt(&mut self, stmt: &PrintStmt, line: usize) -> U;
	fn visit_input_stmt(&mut self, stmt: &InputStmt, line: usize) -> U;
	fn visit_assign_stmt(&mut self, stmt: &AssignStmt, line: usize) -> U;
	fn visit_if_stmt(&mut self, stmt: &IfStmt, line: usize) -> U;
	fn visit_while_stmt(&mut self, stmt: &WhileStmt, line: usize) -> U;
	fn visit_for_stmt(&mut self, stmt: &ForStmt, line: usize) -> U;
	fn visit_return_stmt(&mut self, stmt: &ReturnStmt, line: usize) -> U;
	fn visit_binary_assign_stmt(&mut self, stmt: &BinaryAssignStmt, line: usize) -> U;
}

pub(crate) trait ExprVisitor<U> {
	fn visit_variable_expr(&mut self, expr: &VariableExpr) -> U;
	fn visit_logical_expr(&mut self, expr: &LogicalExpr) -> U;
	fn visit_binary_expr(&mut self, expr: &BinaryExpr) -> U;
	fn visit_unary_expr(&mut self, expr: &UnaryExpr) -> U;
	fn visit_call_expr(&mut self, expr: &CallExpr) -> U;
	fn visit_literal_expr(&mut self, expr: &ExprValue) -> U;
}