mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-30 15:21:12 +00:00
Merge branch 'trunk' into morphic-static-strings
This commit is contained in:
commit
d263016a84
35 changed files with 917 additions and 589 deletions
|
@ -5928,35 +5928,48 @@ fn reuse_function_symbol<'a>(
|
|||
) -> Stmt<'a> {
|
||||
match procs.partial_procs.get(&original) {
|
||||
None => {
|
||||
let is_imported = env.is_imported_symbol(original);
|
||||
|
||||
match arg_var {
|
||||
Some(arg_var) if is_imported => {
|
||||
Some(arg_var) if env.is_imported_symbol(original) => {
|
||||
let layout = layout_cache
|
||||
.from_var(env.arena, arg_var, env.subs)
|
||||
.expect("creating layout does not fail");
|
||||
|
||||
let top_level = TopLevelFunctionLayout::from_layout(env.arena, layout);
|
||||
if procs.imported_module_thunks.contains(&original) {
|
||||
let top_level = TopLevelFunctionLayout::new(env.arena, &[], layout);
|
||||
procs.insert_passed_by_name(
|
||||
env,
|
||||
arg_var,
|
||||
original,
|
||||
top_level,
|
||||
layout_cache,
|
||||
);
|
||||
|
||||
procs.insert_passed_by_name(env, arg_var, original, top_level, layout_cache);
|
||||
force_thunk(env, original, layout, symbol, env.arena.alloc(result))
|
||||
} else {
|
||||
let top_level = TopLevelFunctionLayout::from_layout(env.arena, layout);
|
||||
procs.insert_passed_by_name(
|
||||
env,
|
||||
arg_var,
|
||||
original,
|
||||
top_level,
|
||||
layout_cache,
|
||||
);
|
||||
|
||||
// an imported symbol is either a function, or a top-level 0-argument thunk
|
||||
// it never has closure data, so we use the empty struct
|
||||
return let_empty_struct(symbol, env.arena.alloc(result));
|
||||
let_empty_struct(symbol, env.arena.alloc(result))
|
||||
}
|
||||
}
|
||||
|
||||
_ => {
|
||||
// danger: a foreign symbol may not be specialized!
|
||||
debug_assert!(
|
||||
!is_imported,
|
||||
!env.is_imported_symbol(original),
|
||||
"symbol {:?} while processing module {:?}",
|
||||
original,
|
||||
(env.home, &arg_var),
|
||||
);
|
||||
result
|
||||
}
|
||||
}
|
||||
|
||||
result
|
||||
}
|
||||
|
||||
Some(partial_proc) => {
|
||||
|
|
|
@ -276,7 +276,8 @@ impl<'a> LambdaSet<'a> {
|
|||
|
||||
use UnionVariant::*;
|
||||
match variant {
|
||||
Never | Unit | UnitWithArguments => Layout::Struct(&[]),
|
||||
Never => Layout::Union(UnionLayout::NonRecursive(&[])),
|
||||
Unit | UnitWithArguments => Layout::Struct(&[]),
|
||||
BoolUnion { .. } => Layout::Builtin(Builtin::Int1),
|
||||
ByteUnion(_) => Layout::Builtin(Builtin::Int8),
|
||||
Unwrapped(_tag_name, layouts) => Layout::Struct(layouts.into_bump_slice()),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue