Make sure to drop suffix from symbols exposed to the host

This commit is contained in:
Agus Zubiaga 2024-10-24 20:28:43 -03:00
parent be0afbce25
commit e3c6b756d3
No known key found for this signature in database
4 changed files with 22 additions and 15 deletions

View file

@ -4324,7 +4324,7 @@ fn expose_function_to_host<'a, 'ctx>(
return_layout: InLayout<'a>,
layout_ids: &mut LayoutIds<'a>,
) {
let ident_string = symbol.as_str(&env.interns);
let ident_string = symbol.as_unsuffixed_str(&env.interns);
let proc_layout = ProcLayout {
arguments,
@ -5564,7 +5564,7 @@ pub fn build_procedures<'a>(
let getter_fn = function_value_by_func_spec(env, FuncBorrowSpec::Some(*func_spec), symbol);
let name = getter_fn.get_name().to_str().unwrap();
let getter_name = symbol.as_str(&env.interns);
let getter_name = symbol.as_unsuffixed_str(&env.interns);
// Add the getter function to the module.
let _ = expose_function_to_host_help_c_abi(
@ -5830,7 +5830,7 @@ fn build_procedures_help<'a>(
GenTest | WasmGenTest | CliTest => { /* no host, or exposing types is not supported */ }
Binary | BinaryDev | BinaryGlue => {
for (proc_name, alias_name, hels) in host_exposed_lambda_sets.iter() {
let ident_string = proc_name.name().as_str(&env.interns);
let ident_string = proc_name.name().as_unsuffixed_str(&env.interns);
let fn_name: String = format!("{}_{}", ident_string, hels.id.0);
expose_alias_to_host(

View file

@ -156,6 +156,10 @@ impl Symbol {
})
}
pub fn as_unsuffixed_str(self, interns: &Interns) -> &str {
self.as_str(interns).trim_end_matches('!')
}
pub const fn as_u64(self) -> u64 {
u64::from_ne_bytes(self.to_ne_bytes())
}

View file

@ -4648,7 +4648,7 @@ impl LayoutId {
// Returns something like "#UserApp_foo_1" when given a symbol that interns to "foo"
// and a LayoutId of 1.
pub fn to_symbol_string(self, symbol: Symbol, interns: &Interns) -> String {
let ident_string = symbol.as_str(interns).trim_end_matches('!');
let ident_string = symbol.as_unsuffixed_str(interns);
let module_string = interns.module_ids.get_name(symbol.module_id()).unwrap();
format!("{}_{}_{}", module_string, ident_string, self.0)
}
@ -4656,12 +4656,12 @@ impl LayoutId {
// Returns something like "roc__foo_1_exposed" when given a symbol that interns to "foo"
// and a LayoutId of 1.
pub fn to_exposed_symbol_string(self, symbol: Symbol, interns: &Interns) -> String {
let ident_string = symbol.as_str(interns).trim_end_matches('!');
let ident_string = symbol.as_unsuffixed_str(interns);
format!("roc__{}_{}_exposed", ident_string, self.0)
}
pub fn to_exposed_generic_symbol_string(self, symbol: Symbol, interns: &Interns) -> String {
let ident_string = symbol.as_str(interns).trim_end_matches('!');
let ident_string = symbol.as_unsuffixed_str(interns);
format!("roc__{}_{}_exposed_generic", ident_string, self.0)
}
}