Fix typedefinition in scope
This commit is contained in:
		
							parent
							
								
									82758ae333
								
							
						
					
					
						commit
						8b79959288
					
				| @ -1,8 +1,9 @@ | ||||
| // Arithmetic, function calls and imports! | ||||
| 
 | ||||
| import std::allocate; | ||||
| 
 | ||||
| fn main() -> u8 { | ||||
|     let mut ptr = malloc(4); | ||||
|     let mut ptr = allocate(4); | ||||
| 
 | ||||
|     ptr[0] = 5; | ||||
| 
 | ||||
|  | ||||
| @ -50,6 +50,7 @@ impl ast::Module { | ||||
|                             block.into_mir(module_id), | ||||
|                             (*range).as_meta(module_id), | ||||
|                         ), | ||||
|                         source: module_id, | ||||
|                     }; | ||||
|                     functions.push(def); | ||||
|                 } | ||||
| @ -70,6 +71,7 @@ impl ast::Module { | ||||
|                             .map(|p| (p.0, p.1 .0.into_mir(module_id))) | ||||
|                             .collect(), | ||||
|                         kind: mir::FunctionDefinitionKind::Extern(false), | ||||
|                         source: module_id, | ||||
|                     }; | ||||
|                     functions.push(def); | ||||
|                 } | ||||
|  | ||||
| @ -326,7 +326,7 @@ impl Display for Metadata { | ||||
| 
 | ||||
| impl Display for SourceModuleId { | ||||
|     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { | ||||
|         write!(f, "Mod {}", self.0) | ||||
|         write!(f, "{}", self.0) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| @ -364,7 +364,7 @@ impl Display for TypeKind { | ||||
|                 Display::fmt(len, f)?; | ||||
|                 f.write_char(']') | ||||
|             } | ||||
|             TypeKind::CustomType(CustomTypeKey(name, mod_id)) => write!(f, "{}:{}", mod_id, name), | ||||
|             TypeKind::CustomType(CustomTypeKey(name, mod_id)) => write!(f, "{}@{}", name, mod_id), | ||||
|             TypeKind::Borrow(type_kind, false) => { | ||||
|                 write!(f, "&")?; | ||||
|                 Display::fmt(type_kind, f) | ||||
|  | ||||
| @ -320,6 +320,7 @@ impl<'map> Pass for LinkerPass<'map> { | ||||
|                     return_type: return_type, | ||||
|                     parameters: param_tys, | ||||
|                     kind: super::FunctionDefinitionKind::Extern(true), | ||||
|                     source: imported_mod_id, | ||||
|                 }); | ||||
|             } | ||||
|         } | ||||
|  | ||||
| @ -293,6 +293,7 @@ pub struct FunctionDefinition { | ||||
|     pub return_type: TypeKind, | ||||
|     pub parameters: Vec<(String, TypeKind)>, | ||||
|     pub kind: FunctionDefinitionKind, | ||||
|     pub source: SourceModuleId, | ||||
| } | ||||
| 
 | ||||
| #[derive(Debug)] | ||||
|  | ||||
| @ -295,7 +295,7 @@ impl Module { | ||||
|             scope | ||||
|                 .types | ||||
|                 .set( | ||||
|                     CustomTypeKey(typedef.name.clone(), self.module_id), | ||||
|                     CustomTypeKey(typedef.name.clone(), typedef.source_module), | ||||
|                     typedef.clone(), | ||||
|                 ) | ||||
|                 .ok(); | ||||
|  | ||||
| @ -322,6 +322,7 @@ impl Expression { | ||||
|                 // Check that the resolved type is at least a struct, no
 | ||||
|                 // need for further resolution.
 | ||||
|                 let kind = expr_ty.resolve_weak().unwrap(); | ||||
|                 dbg!(&state.scope); | ||||
|                 match kind { | ||||
|                     CustomType(key) => { | ||||
|                         let struct_ty = state | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user