Resolve types WIP.
This commit is contained in:
parent
3a75a0c8e8
commit
96ea0c5e50
@ -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,
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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>;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user