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::extern_function::ExternFunction;
use crate::ast::fqn_context::FqnContext; use crate::ast::fqn_context::FqnContext;
use crate::ast::function::Function; use crate::ast::function::Function;
use crate::ast::helpers::collect_diagnostics_into_mut; use crate::ast::helpers::{collect_diagnostics_into_mut, insert_resolved_types_into};
use crate::ast::{NamesTable, NodeId}; use crate::ast::{NamesTable, ResolvedTypes};
use crate::compile_pipeline::FileId; use crate::compile_pipeline::FileId;
use crate::diagnostic::{Diagnostic, Diagnostics}; use crate::diagnostic::{Diagnostic, Diagnostics};
use crate::ir::ir_class::IrClass; use crate::ir::ir_class::IrClass;
use crate::ir::ir_function::IrFunction; use crate::ir::ir_function::IrFunction;
use crate::symbol::Symbol; use crate::symbol::Symbol;
use crate::symbol_table::SymbolTable;
use crate::symbol_table::util::try_insert_symbols_into; use crate::symbol_table::util::try_insert_symbols_into;
use crate::symbol_table::SymbolTable;
use crate::types_table::TypesTable; use crate::types_table::TypesTable;
use crate::{diagnostics_result, handle_diagnostics}; use crate::{diagnostics_result, handle_diagnostics};
use std::collections::HashMap;
pub struct CompilationUnit { pub struct CompilationUnit {
file_id: Option<FileId>, file_id: Option<FileId>,
@ -139,6 +138,7 @@ impl CompilationUnit {
(names_table, diagnostics) (names_table, diagnostics)
} }
#[deprecated]
pub fn check_names(&self, symbol_table: &mut SymbolTable) -> Result<(), Vec<Diagnostic>> { pub fn check_names(&self, symbol_table: &mut SymbolTable) -> Result<(), Vec<Diagnostic>> {
let mut diagnostics = vec![]; let mut diagnostics = vec![];
for class in &self.classes { for class in &self.classes {
@ -156,6 +156,20 @@ impl CompilationUnit {
diagnostics_result!(diagnostics) 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( pub fn gather_types_into(
&self, &self,
symbol_table: &SymbolTable, 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::fqn_context::FqnContext;
use crate::ast::parameter::Parameter; use crate::ast::parameter::Parameter;
use crate::diagnostic::{Diagnostic, Diagnostics}; 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); 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 crate::symbol::Symbol;
use std::collections::HashMap; use std::collections::HashMap;
use crate::type_info::TypeInfo;
pub mod assign_statement; pub mod assign_statement;
pub mod binary_expression; pub mod binary_expression;
@ -31,3 +32,4 @@ pub mod type_use;
pub type NodeId = usize; pub type NodeId = usize;
pub type NamesTable = HashMap<NodeId, Symbol>; pub type NamesTable = HashMap<NodeId, Symbol>;
pub type ResolvedTypes = HashMap<NodeId, TypeInfo>;