Fix linking associated functions, fix other examples
This commit is contained in:
		
							parent
							
								
									ea6458dddc
								
							
						
					
					
						commit
						bd8994bb37
					
				| @ -1,6 +1,5 @@ | ||||
| // Arithmetic, function calls and imports! | ||||
| 
 | ||||
| import std::allocate; | ||||
| import std::print; | ||||
| 
 | ||||
| fn other() -> i16 { | ||||
| @ -9,7 +8,7 @@ fn other() -> i16 { | ||||
| 
 | ||||
| fn main() -> u32 { | ||||
| 
 | ||||
|   let mut v = (allocate(4) as *u32); | ||||
|   let mut v = (malloc(4) as *u32); | ||||
|   v[0] = other() as u32; | ||||
| 
 | ||||
|   return v[0]; | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| // Arithmetic, function calls and imports! | ||||
| 
 | ||||
| fn main() -> u8 { | ||||
|     let mut ptr = u8::alloca(4); | ||||
|     let mut ptr = u8::malloc(4); | ||||
| 
 | ||||
|     ptr[0] = 5; | ||||
| 
 | ||||
|  | ||||
| @ -254,18 +254,19 @@ impl mir::Module { | ||||
|                 .collect(); | ||||
| 
 | ||||
|             let is_main = self.is_main && function.name == "main"; | ||||
|             let module_name = if let Some(module) = function.source { | ||||
|             let module_prefix = if let Some(module) = function.source { | ||||
|                 if module == self.module_id { | ||||
|                     format!("reid.{}", self.name) | ||||
|                     format!("reid.{}.", self.name) | ||||
|                 } else { | ||||
|                     format!("reid.{}", modules.get(&module).unwrap().name) | ||||
|                     format!("reid.{}.", modules.get(&module).unwrap().name) | ||||
|                 } | ||||
|             } else { | ||||
|                 format!("reid.intrinsic") | ||||
|                 format!("reid.intrinsic.") | ||||
|             }; | ||||
|             let full_name = format!("{}{}::{}", module_prefix, ty, function.name); | ||||
|             let func = match &function.kind { | ||||
|                 mir::FunctionDefinitionKind::Local(_, _) => Some(module.function( | ||||
|                     &format!("{}.{}.{}", module_name, ty, function.name), | ||||
|                     &full_name, | ||||
|                     None, | ||||
|                     function.return_type.get_type(&type_values), | ||||
|                     param_types, | ||||
| @ -277,7 +278,7 @@ impl mir::Module { | ||||
|                     }, | ||||
|                 )), | ||||
|                 mir::FunctionDefinitionKind::Extern(imported) => Some(module.function( | ||||
|                     &function.linkage_name.clone().unwrap_or(function.name.clone()), | ||||
|                     &full_name, | ||||
|                     None, | ||||
|                     function.return_type.get_type(&type_values), | ||||
|                     param_types, | ||||
|  | ||||
| @ -321,7 +321,7 @@ impl<'map> Pass for LinkerPass<'map> { | ||||
|                             ty.clone(), | ||||
|                             FunctionDefinition { | ||||
|                                 name: func_name.clone(), | ||||
|                                 linkage_name: Some(format!("{}.{}", ty, func_name)), | ||||
|                                 linkage_name: Some(format!("{}::{}", ty, func_name)), | ||||
|                                 is_pub: false, | ||||
|                                 is_imported: false, | ||||
|                                 return_type, | ||||
|  | ||||
| @ -149,6 +149,6 @@ fn associated_functions() { | ||||
|     test( | ||||
|         include_str!("../../examples/associated_functions.reid"), | ||||
|         "test", | ||||
|         Some(32), | ||||
|         Some(4), | ||||
|     ); | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user