Resolve types WIP.

This commit is contained in:
Jesse Brault 2026-04-09 13:55:55 -05:00
parent 3a75a0c8e8
commit 96ea0c5e50
3 changed files with 27 additions and 5 deletions

View File

@ -2,18 +2,17 @@ use crate::ast::class::Class;
use crate::ast::extern_function::ExternFunction;
use crate::ast::fqn_context::FqnContext;
use crate::ast::function::Function;
use crate::ast::helpers::collect_diagnostics_into_mut;
use crate::ast::{NamesTable, NodeId};
use crate::ast::helpers::{collect_diagnostics_into_mut, insert_resolved_types_into};
use crate::ast::{NamesTable, ResolvedTypes};
use crate::compile_pipeline::FileId;
use crate::diagnostic::{Diagnostic, Diagnostics};
use crate::ir::ir_class::IrClass;
use crate::ir::ir_function::IrFunction;
use crate::symbol::Symbol;
use crate::symbol_table::SymbolTable;
use crate::symbol_table::util::try_insert_symbols_into;
use crate::symbol_table::SymbolTable;
use crate::types_table::TypesTable;
use crate::{diagnostics_result, handle_diagnostics};
use std::collections::HashMap;
pub struct CompilationUnit {
file_id: Option<FileId>,
@ -139,6 +138,7 @@ impl CompilationUnit {
(names_table, diagnostics)
}
#[deprecated]
pub fn check_names(&self, symbol_table: &mut SymbolTable) -> Result<(), Vec<Diagnostic>> {
let mut diagnostics = vec![];
for class in &self.classes {
@ -156,6 +156,20 @@ impl CompilationUnit {
diagnostics_result!(diagnostics)
}
pub fn resolve_types(&self, names_table: &NamesTable) -> (ResolvedTypes, Diagnostics) {
let mut diagnostics = Diagnostics::new();
let mut resolved_types = ResolvedTypes::new();
for function in &self.functions {
let (ts, mut ds) = todo!();
insert_resolved_types_into(ts, &mut resolved_types);
diagnostics.append(&mut ds);
}
(resolved_types, diagnostics)
}
#[deprecated]
pub fn gather_types_into(
&self,
symbol_table: &SymbolTable,

View File

@ -1,4 +1,4 @@
use crate::ast::NamesTable;
use crate::ast::{NamesTable, ResolvedTypes};
use crate::ast::fqn_context::FqnContext;
use crate::ast::parameter::Parameter;
use crate::diagnostic::{Diagnostic, Diagnostics};
@ -127,3 +127,9 @@ pub fn insert_resolved_names_into(source: NamesTable, destination: &mut NamesTab
destination.insert(node_id, symbol);
}
}
pub fn insert_resolved_types_into(source: ResolvedTypes, destination: &mut ResolvedTypes) {
for (node_id, type_info) in source {
destination.insert(node_id, type_info);
}
}

View File

@ -1,5 +1,6 @@
use crate::symbol::Symbol;
use std::collections::HashMap;
use crate::type_info::TypeInfo;
pub mod assign_statement;
pub mod binary_expression;
@ -31,3 +32,4 @@ pub mod type_use;
pub type NodeId = usize;
pub type NamesTable = HashMap<NodeId, Symbol>;
pub type ResolvedTypes = HashMap<NodeId, TypeInfo>;