From c32ce44b29393f681b1191302b9103cc60691fc2 Mon Sep 17 00:00:00 2001 From: Brian Carroll Date: Thu, 7 Jul 2022 20:32:54 +0100 Subject: [PATCH] wasm: Explicit exhaustiveness on conditionals for higher-order lowlevels --- crates/compiler/gen_wasm/src/low_level.rs | 27 ++++++++++++++--------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/crates/compiler/gen_wasm/src/low_level.rs b/crates/compiler/gen_wasm/src/low_level.rs index 4d1a5d3ab6..f0038316ac 100644 --- a/crates/compiler/gen_wasm/src/low_level.rs +++ b/crates/compiler/gen_wasm/src/low_level.rs @@ -2033,7 +2033,10 @@ pub fn call_higher_order_lowlevel<'a>( .unwrap(); match op { ListSortWith { .. } => ProcSource::HigherOrderCompare(passed_proc_index), - _ => ProcSource::HigherOrderMapper(passed_proc_index), + ListMap { .. } | ListMap2 { .. } | ListMap3 { .. } | ListMap4 { .. } => { + ProcSource::HigherOrderMapper(passed_proc_index) + } + DictWalk { .. } => todo!("DictWalk"), } }; let wrapper_sym = backend.create_symbol(&format!("#wrap#{:?}", fn_name)); @@ -2055,19 +2058,23 @@ pub fn call_higher_order_lowlevel<'a>( .map(Layout::Boxed), ); - if let ProcSource::HigherOrderMapper(_) = helper_proc_source { - // Our convention for mappers is that they write to the heap via the last argument - wrapper_arg_layouts.push(Layout::Boxed(result_layout)); - ProcLayout { - arguments: wrapper_arg_layouts.into_bump_slice(), - result: Layout::UNIT, - captures_niche: fn_name.captures_niche(), + match helper_proc_source { + ProcSource::HigherOrderMapper(_) => { + // Our convention for mappers is that they write to the heap via the last argument + wrapper_arg_layouts.push(Layout::Boxed(result_layout)); + ProcLayout { + arguments: wrapper_arg_layouts.into_bump_slice(), + result: Layout::UNIT, + captures_niche: fn_name.captures_niche(), + } } - } else { - ProcLayout { + ProcSource::HigherOrderCompare(_) => ProcLayout { arguments: wrapper_arg_layouts.into_bump_slice(), result: *result_layout, captures_niche: fn_name.captures_niche(), + }, + ProcSource::Roc | ProcSource::Helper => { + internal_error!("Should never reach here for {:?}", helper_proc_source) } } };