Fix linking associated functions, fix other examples

This commit is contained in:
Sofia 2025-07-28 22:02:49 +03:00
parent ea6458dddc
commit bd8994bb37
5 changed files with 11 additions and 11 deletions

View File

@ -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];

View File

@ -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;

View File

@ -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,

View File

@ -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,

View File

@ -149,6 +149,6 @@ fn associated_functions() {
test(
include_str!("../../examples/associated_functions.reid"),
"test",
Some(32),
Some(4),
);
}