re-use proc's symbol

This commit is contained in:
Folkert 2023-04-30 15:32:37 +02:00
parent 9f8077c3a3
commit fa5b18685a
No known key found for this signature in database
GPG key ID: 1F17F6FFD112B97C

View file

@ -239,9 +239,11 @@ fn build_object<'a, B: Backend<'a>>(
// Names and linker data for user procedures // Names and linker data for user procedures
for ((sym, layout), proc) in procedures { for ((sym, layout), proc) in procedures {
debug_assert_eq!(sym, proc.name.name());
if backend.env().exposed_to_host.contains(&sym) { if backend.env().exposed_to_host.contains(&sym) {
let exposed_proc = build_exposed_proc(&mut backend, sym, &proc); let exposed_proc = build_exposed_proc(&mut backend, &proc);
let exposed_generic_proc = build_exposed_generic_proc(&mut backend, sym, &proc); let exposed_generic_proc = build_exposed_generic_proc(&mut backend, &proc);
#[cfg(debug_assertions)] #[cfg(debug_assertions)]
{ {
@ -275,8 +277,6 @@ fn build_object<'a, B: Backend<'a>>(
); );
} }
debug_assert_eq!(sym, proc.name.name());
build_proc_symbol( build_proc_symbol(
&mut output, &mut output,
&mut layout_ids, &mut layout_ids,
@ -389,19 +389,16 @@ fn build_object<'a, B: Backend<'a>>(
output output
} }
fn build_exposed_proc<'a, B: Backend<'a>>( fn build_exposed_proc<'a, B: Backend<'a>>(backend: &mut B, proc: &Proc<'a>) -> Proc<'a> {
backend: &mut B,
sym: roc_module::symbol::Symbol,
proc: &Proc<'a>,
) -> Proc<'a> {
let arena = backend.env().arena; let arena = backend.env().arena;
let interns = backend.interns(); let interns = backend.interns();
let sym = proc.name.name();
let platform = sym.module_id(); let platform = sym.module_id();
let fn_name = sym.as_str(interns).to_string(); let fn_name = sym.as_str(interns).to_string();
let generic_proc_name = backend.debug_symbol_in(platform, &fn_name); let generic_proc_name = backend.debug_symbol_in(platform, &fn_name);
let s1 = backend.debug_symbol_in(platform, "s1"); let s4 = backend.debug_symbol_in(platform, "s4");
let call_args = bumpalo::collections::Vec::from_iter_in(proc.args.iter().map(|t| t.1), arena); let call_args = bumpalo::collections::Vec::from_iter_in(proc.args.iter().map(|t| t.1), arena);
let call_layouts = let call_layouts =
@ -417,10 +414,10 @@ fn build_exposed_proc<'a, B: Backend<'a>>(
}; };
let body = Stmt::Let( let body = Stmt::Let(
s1, s4,
Expr::Call(call), Expr::Call(call),
proc.ret_layout, proc.ret_layout,
arena.alloc(Stmt::Ret(s1)), arena.alloc(Stmt::Ret(s4)),
); );
Proc { Proc {
@ -434,14 +431,11 @@ fn build_exposed_proc<'a, B: Backend<'a>>(
} }
} }
fn build_exposed_generic_proc<'a, B: Backend<'a>>( fn build_exposed_generic_proc<'a, B: Backend<'a>>(backend: &mut B, proc: &Proc<'a>) -> Proc<'a> {
backend: &mut B,
sym: roc_module::symbol::Symbol,
proc: &Proc<'a>,
) -> Proc<'a> {
let arena = backend.env().arena; let arena = backend.env().arena;
let interns = backend.interns(); let interns = backend.interns();
let sym = proc.name.name();
let platform = sym.module_id(); let platform = sym.module_id();
let fn_name = sym.as_str(interns).to_string(); let fn_name = sym.as_str(interns).to_string();