deimos-lang/dmc-lib/src/ast/statement.rs
2026-02-27 16:26:56 -06:00

51 lines
1.7 KiB
Rust

use crate::ast::expression_statement::ExpressionStatement;
use crate::ast::function::FunctionLoweringContext;
use crate::ast::let_statement::LetStatement;
use crate::diagnostic::Diagnostic;
use crate::symbol_table::SymbolTable;
pub enum Statement {
Let(LetStatement),
Expression(ExpressionStatement),
}
impl Statement {
pub fn gather_declared_names(&mut self, symbol_table: &mut SymbolTable) -> Vec<Diagnostic> {
match self {
Statement::Let(let_statement) => let_statement.gather_declared_names(symbol_table),
Statement::Expression(expression_statement) => {
expression_statement.gather_declared_names(symbol_table)
}
}
}
pub fn check_name_usages(&mut self, symbol_table: &SymbolTable) -> Vec<Diagnostic> {
match self {
Statement::Let(let_statement) => let_statement.check_name_usages(symbol_table),
Statement::Expression(expression_statement) => {
expression_statement.check_name_usages(symbol_table)
}
}
}
pub fn type_check(&mut self, symbol_table: &SymbolTable) -> Vec<Diagnostic> {
match self {
Statement::Let(let_statement) => let_statement.type_check(symbol_table),
Statement::Expression(expression_statement) => {
expression_statement.type_check(symbol_table)
}
}
}
pub fn lower_to_ir(&self, context: &mut FunctionLoweringContext) {
match self {
Statement::Let(let_statement) => {
let_statement.lower_to_ir(context);
}
Statement::Expression(expression) => {
expression.lower_to_ir(context);
}
}
}
}