mirror of
https://github.com/roc-lang/roc.git
synced 2025-08-04 04:08:19 +00:00
Make sure to drop suffix from symbols exposed to the host
This commit is contained in:
parent
be0afbce25
commit
e3c6b756d3
4 changed files with 22 additions and 15 deletions
|
@ -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(
|
||||
|
|
|
@ -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())
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -97,7 +97,7 @@ pub fn generate_stub_lib(
|
|||
.exposed_to_host
|
||||
.top_level_values
|
||||
.keys()
|
||||
.map(|x| x.as_str(&loaded.interns).to_string())
|
||||
.map(|x| x.as_unsuffixed_str(&loaded.interns).to_string())
|
||||
.collect();
|
||||
|
||||
let exported_closure_types = loaded
|
||||
|
@ -108,7 +108,7 @@ pub fn generate_stub_lib(
|
|||
format!(
|
||||
"{}_{}",
|
||||
x.module_string(&loaded.interns),
|
||||
x.as_str(&loaded.interns)
|
||||
x.as_unsuffixed_str(&loaded.interns)
|
||||
)
|
||||
})
|
||||
.collect();
|
||||
|
@ -162,7 +162,7 @@ impl ExposedSymbols {
|
|||
let mut custom_names = Vec::new();
|
||||
|
||||
for x in exposed_to_host.top_level_values.keys() {
|
||||
let sym = x.as_str(interns);
|
||||
let sym = x.as_unsuffixed_str(interns);
|
||||
|
||||
custom_names.extend([
|
||||
format!("roc__{sym}_1_exposed"),
|
||||
|
@ -170,10 +170,13 @@ impl ExposedSymbols {
|
|||
format!("roc__{sym}_1_exposed_size"),
|
||||
]);
|
||||
|
||||
let exported_closure_types = exposed_to_host
|
||||
.closure_types
|
||||
.iter()
|
||||
.map(|x| format!("{}_{}", x.module_string(interns), x.as_str(interns)));
|
||||
let exported_closure_types = exposed_to_host.closure_types.iter().map(|x| {
|
||||
format!(
|
||||
"{}_{}",
|
||||
x.module_string(interns),
|
||||
x.as_unsuffixed_str(interns)
|
||||
)
|
||||
});
|
||||
|
||||
for (i, _) in exported_closure_types.enumerate() {
|
||||
custom_names.extend([
|
||||
|
@ -185,7 +188,7 @@ impl ExposedSymbols {
|
|||
}
|
||||
|
||||
for x in &exposed_to_host.getters {
|
||||
let sym = x.as_str(interns);
|
||||
let sym = x.as_unsuffixed_str(interns);
|
||||
custom_names.extend([
|
||||
sym.to_string(),
|
||||
format!("{sym}_generic"),
|
||||
|
@ -194,7 +197,7 @@ impl ExposedSymbols {
|
|||
}
|
||||
|
||||
for (top_level_value, lambda_set_id) in &exposed_to_host.lambda_sets {
|
||||
let sym = top_level_value.as_str(interns);
|
||||
let sym = top_level_value.as_unsuffixed_str(interns);
|
||||
let id = lambda_set_id.0;
|
||||
custom_names.extend([format!("roc__{sym}_{id}_caller")]);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue