From 96ea0c5e50f1b8381b9f972765a2dcb882a9c2f8 Mon Sep 17 00:00:00 2001 From: Jesse Brault Date: Thu, 9 Apr 2026 13:55:55 -0500 Subject: [PATCH] Resolve types WIP. --- dmc-lib/src/ast/compilation_unit.rs | 22 ++++++++++++++++++---- dmc-lib/src/ast/helpers.rs | 8 +++++++- dmc-lib/src/ast/mod.rs | 2 ++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/dmc-lib/src/ast/compilation_unit.rs b/dmc-lib/src/ast/compilation_unit.rs index 9a31bb8..e58b1b1 100644 --- a/dmc-lib/src/ast/compilation_unit.rs +++ b/dmc-lib/src/ast/compilation_unit.rs @@ -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, @@ -139,6 +138,7 @@ impl CompilationUnit { (names_table, diagnostics) } + #[deprecated] pub fn check_names(&self, symbol_table: &mut SymbolTable) -> Result<(), Vec> { 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, diff --git a/dmc-lib/src/ast/helpers.rs b/dmc-lib/src/ast/helpers.rs index 1ecdb9a..81e8df0 100644 --- a/dmc-lib/src/ast/helpers.rs +++ b/dmc-lib/src/ast/helpers.rs @@ -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); + } +} diff --git a/dmc-lib/src/ast/mod.rs b/dmc-lib/src/ast/mod.rs index 344bde0..0156fba 100644 --- a/dmc-lib/src/ast/mod.rs +++ b/dmc-lib/src/ast/mod.rs @@ -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; +pub type ResolvedTypes = HashMap;