Fix modules needing to be evaluated in order in codegen
This commit is contained in:
parent
aad3c93068
commit
015c111b29
@ -1,4 +1,4 @@
|
|||||||
import triple_import_vec2::Vec2;
|
import triple_import_vec2::Vec2;
|
||||||
import triple_import_ship::Ship;
|
import triple_import_ship::Ship;
|
||||||
|
|
||||||
fn main() -> i32 { return 0; }
|
fn main() -> i32 { return 0; }
|
@ -1,11 +1,3 @@
|
|||||||
|
|
||||||
import triple_import_vec2::Vec2;
|
import triple_import_vec2::Vec2;
|
||||||
struct Ship { position: Vec2 }
|
|
||||||
|
|
||||||
impl Ship {
|
struct Ship { position: Vec2 }
|
||||||
pub fn new() -> Ship {
|
|
||||||
Ship {
|
|
||||||
position: Vec2 {x: 15, y: 16}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,2 +1,6 @@
|
|||||||
|
|
||||||
struct Vec2 { x: u32, y: u32 }
|
struct Vec2 { x: f32, y: f32 }
|
||||||
|
|
||||||
|
impl Vec2 {
|
||||||
|
pub fn zero() -> Vec2 { Vec2 { x: 0.0, y: 0.0 } }
|
||||||
|
}
|
||||||
|
@ -62,10 +62,12 @@ impl mir::Context {
|
|||||||
let mut modules = HashMap::new();
|
let mut modules = HashMap::new();
|
||||||
let mut modules_sorted = self.modules.iter().map(|(_, m)| m).collect::<Vec<_>>();
|
let mut modules_sorted = self.modules.iter().map(|(_, m)| m).collect::<Vec<_>>();
|
||||||
modules_sorted.sort_by(|m1, m2| m2.module_id.cmp(&m1.module_id));
|
modules_sorted.sort_by(|m1, m2| m2.module_id.cmp(&m1.module_id));
|
||||||
|
for module in &modules_sorted {
|
||||||
|
modules.insert(module.module_id, *module);
|
||||||
|
}
|
||||||
|
|
||||||
for module in &modules_sorted {
|
for module in &modules_sorted {
|
||||||
let codegen = module.codegen(context, modules.clone())?;
|
let codegen = module.codegen(context, modules.clone())?;
|
||||||
modules.insert(module.module_id, codegen);
|
|
||||||
}
|
}
|
||||||
Ok(CodegenContext { context })
|
Ok(CodegenContext { context })
|
||||||
}
|
}
|
||||||
@ -128,7 +130,7 @@ impl mir::Module {
|
|||||||
fn codegen<'ctx>(
|
fn codegen<'ctx>(
|
||||||
&'ctx self,
|
&'ctx self,
|
||||||
context: &'ctx Context,
|
context: &'ctx Context,
|
||||||
modules: HashMap<SourceModuleId, ModuleCodegen<'ctx>>,
|
modules: HashMap<SourceModuleId, &mir::Module>,
|
||||||
) -> Result<ModuleCodegen<'ctx>, ErrorKind> {
|
) -> Result<ModuleCodegen<'ctx>, ErrorKind> {
|
||||||
let mut module = context.module(&self.name, self.is_main);
|
let mut module = context.module(&self.name, self.is_main);
|
||||||
let tokens = &self.tokens;
|
let tokens = &self.tokens;
|
||||||
@ -321,11 +323,12 @@ impl mir::Module {
|
|||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
let is_main = self.is_main && function.name == "main";
|
let is_main = self.is_main && function.name == "main";
|
||||||
let module_prefix = if let Some(module) = function.source {
|
let module_prefix = if let Some(module_id) = function.source {
|
||||||
if module == self.module_id {
|
if module_id == self.module_id {
|
||||||
format!("reid.{}.", self.name)
|
format!("reid.{}.", self.name)
|
||||||
} else {
|
} else {
|
||||||
format!("reid.{}.", modules.get(&module).unwrap().name)
|
dbg!(self.module_id, module_id);
|
||||||
|
format!("reid.{}.", modules.get(&module_id).unwrap().name)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
format!("reid.intrinsic.")
|
format!("reid.intrinsic.")
|
||||||
|
@ -11,6 +11,7 @@ use crate::{
|
|||||||
codegen::intrinsics::LLVMIntrinsicKind,
|
codegen::intrinsics::LLVMIntrinsicKind,
|
||||||
lexer::FullToken,
|
lexer::FullToken,
|
||||||
mir::{
|
mir::{
|
||||||
|
self,
|
||||||
pass::{AssociatedFunctionKey, BinopKey},
|
pass::{AssociatedFunctionKey, BinopKey},
|
||||||
CustomTypeKey, FunctionParam, Metadata, SourceModuleId, TypeDefinition, TypeKind,
|
CustomTypeKey, FunctionParam, Metadata, SourceModuleId, TypeDefinition, TypeKind,
|
||||||
},
|
},
|
||||||
@ -20,7 +21,7 @@ use super::{allocator::Allocator, ErrorKind, IntrinsicFunction, ModuleCodegen};
|
|||||||
|
|
||||||
pub struct Scope<'ctx, 'scope> {
|
pub struct Scope<'ctx, 'scope> {
|
||||||
pub(super) context: &'ctx Context,
|
pub(super) context: &'ctx Context,
|
||||||
pub(super) modules: &'scope HashMap<SourceModuleId, ModuleCodegen<'ctx>>,
|
pub(super) modules: &'scope HashMap<SourceModuleId, &'ctx mir::Module>,
|
||||||
pub(super) tokens: &'ctx Vec<FullToken>,
|
pub(super) tokens: &'ctx Vec<FullToken>,
|
||||||
pub(super) module: &'ctx Module<'ctx>,
|
pub(super) module: &'ctx Module<'ctx>,
|
||||||
pub(super) module_id: SourceModuleId,
|
pub(super) module_id: SourceModuleId,
|
||||||
|
@ -124,7 +124,7 @@ impl TypeKind {
|
|||||||
type_map: &HashMap<CustomTypeKey, TypeDefinition>,
|
type_map: &HashMap<CustomTypeKey, TypeDefinition>,
|
||||||
local_mod: SourceModuleId,
|
local_mod: SourceModuleId,
|
||||||
tokens: &Vec<FullToken>,
|
tokens: &Vec<FullToken>,
|
||||||
modules: &HashMap<SourceModuleId, ModuleCodegen>,
|
modules: &HashMap<SourceModuleId, &mir::Module>,
|
||||||
) -> DebugTypeValue {
|
) -> DebugTypeValue {
|
||||||
if let Some(ty) = debug_types.get(self) {
|
if let Some(ty) = debug_types.get(self) {
|
||||||
return *ty;
|
return *ty;
|
||||||
|
Loading…
Reference in New Issue
Block a user