diff --git a/compiler/builtins/bitcode/src/list.zig b/compiler/builtins/bitcode/src/list.zig index 4622693588..bd29b3dfe3 100644 --- a/compiler/builtins/bitcode/src/list.zig +++ b/compiler/builtins/bitcode/src/list.zig @@ -303,7 +303,6 @@ pub fn listMap3( list1: RocList, list2: RocList, list3: RocList, - transform: Opaque, caller: Caller3, data: Opaque, inc_n_data: IncN, diff --git a/compiler/gen/src/llvm/build.rs b/compiler/gen/src/llvm/build.rs index 8c9725c7cd..77cda093b6 100644 --- a/compiler/gen/src/llvm/build.rs +++ b/compiler/gen/src/llvm/build.rs @@ -3777,9 +3777,12 @@ fn run_higher_order_low_level<'a, 'ctx, 'env>( let (closure, closure_layout) = load_symbol_and_layout(scope, &args[2]); - match list_layout { - Layout::Builtin(Builtin::EmptyList) => empty_list(env), - Layout::Builtin(Builtin::List(_, element_layout)) => { + match (list_layout, return_layout) { + (Layout::Builtin(Builtin::EmptyList), _) => empty_list(env), + ( + Layout::Builtin(Builtin::List(_, element_layout)), + Layout::Builtin(Builtin::List(_, result_layout)), + ) => { let argument_layouts = &[**element_layout]; let roc_function_call = roc_function_call( @@ -3792,7 +3795,7 @@ fn run_higher_order_low_level<'a, 'ctx, 'env>( argument_layouts, ); - list_map(env, roc_function_call, list, element_layout, return_layout) + list_map(env, roc_function_call, list, element_layout, result_layout) } _ => unreachable!("invalid list layout"), } @@ -3806,10 +3809,11 @@ fn run_higher_order_low_level<'a, 'ctx, 'env>( let function = passed_function_at_index!(2); let (closure, closure_layout) = load_symbol_and_layout(scope, &args[3]); - match (list1_layout, list2_layout) { + match (list1_layout, list2_layout, return_layout) { ( Layout::Builtin(Builtin::List(_, element1_layout)), Layout::Builtin(Builtin::List(_, element2_layout)), + Layout::Builtin(Builtin::List(_, result_layout)), ) => { let argument_layouts = &[**element1_layout, **element2_layout]; @@ -3831,11 +3835,11 @@ fn run_higher_order_low_level<'a, 'ctx, 'env>( list2, element1_layout, element2_layout, - return_layout, + result_layout, ) } - (Layout::Builtin(Builtin::EmptyList), _) - | (_, Layout::Builtin(Builtin::EmptyList)) => empty_list(env), + (Layout::Builtin(Builtin::EmptyList), _, _) + | (_, Layout::Builtin(Builtin::EmptyList), _) => empty_list(env), _ => unreachable!("invalid list layout"), } } @@ -3849,11 +3853,12 @@ fn run_higher_order_low_level<'a, 'ctx, 'env>( let function = passed_function_at_index!(3); let (closure, closure_layout) = load_symbol_and_layout(scope, &args[4]); - match (list1_layout, list2_layout, list3_layout) { + match (list1_layout, list2_layout, list3_layout, return_layout) { ( Layout::Builtin(Builtin::List(_, element1_layout)), Layout::Builtin(Builtin::List(_, element2_layout)), Layout::Builtin(Builtin::List(_, element3_layout)), + Layout::Builtin(Builtin::List(_, result_layout)), ) => { let argument_layouts = &[**element1_layout, **element2_layout, **element3_layout]; @@ -3878,12 +3883,12 @@ fn run_higher_order_low_level<'a, 'ctx, 'env>( element1_layout, element2_layout, element3_layout, - return_layout, + result_layout, ) } - (Layout::Builtin(Builtin::EmptyList), _, _) - | (_, Layout::Builtin(Builtin::EmptyList), _) - | (_, _, Layout::Builtin(Builtin::EmptyList)) => empty_list(env), + (Layout::Builtin(Builtin::EmptyList), _, _, _) + | (_, Layout::Builtin(Builtin::EmptyList), _, _) + | (_, _, Layout::Builtin(Builtin::EmptyList), _) => empty_list(env), _ => unreachable!("invalid list layout"), } } @@ -3897,9 +3902,12 @@ fn run_higher_order_low_level<'a, 'ctx, 'env>( let (closure, closure_layout) = load_symbol_and_layout(scope, &args[2]); - match list_layout { - Layout::Builtin(Builtin::EmptyList) => empty_list(env), - Layout::Builtin(Builtin::List(_, element_layout)) => { + match (list_layout, return_layout) { + (Layout::Builtin(Builtin::EmptyList), _) => empty_list(env), + ( + Layout::Builtin(Builtin::List(_, element_layout)), + Layout::Builtin(Builtin::List(_, result_layout)), + ) => { let argument_layouts = &[Layout::Builtin(Builtin::Usize), **element_layout]; let roc_function_call = roc_function_call( @@ -3912,7 +3920,7 @@ fn run_higher_order_low_level<'a, 'ctx, 'env>( argument_layouts, ); - list_map_with_index(env, roc_function_call, list, element_layout, return_layout) + list_map_with_index(env, roc_function_call, list, element_layout, result_layout) } _ => unreachable!("invalid list layout"), } diff --git a/compiler/gen/src/llvm/build_list.rs b/compiler/gen/src/llvm/build_list.rs index 37fab7a6a0..2c7418d322 100644 --- a/compiler/gen/src/llvm/build_list.rs +++ b/compiler/gen/src/llvm/build_list.rs @@ -865,7 +865,7 @@ pub fn list_map3<'a, 'ctx, 'env>( element1_layout: &Layout<'a>, element2_layout: &Layout<'a>, element3_layout: &Layout<'a>, - return_layout: &Layout<'a>, + result_layout: &Layout<'a>, ) -> BasicValueEnum<'ctx> { let dec_a = build_dec_wrapper(env, layout_ids, element1_layout); let dec_b = build_dec_wrapper(env, layout_ids, element2_layout); @@ -881,11 +881,11 @@ pub fn list_map3<'a, 'ctx, 'env>( pass_as_opaque(env, roc_function_call.data), roc_function_call.inc_n_data.into(), roc_function_call.data_is_owned.into(), - alignment_intvalue(env, return_layout), + alignment_intvalue(env, result_layout), layout_width(env, element1_layout), layout_width(env, element2_layout), layout_width(env, element3_layout), - layout_width(env, return_layout), + layout_width(env, result_layout), dec_a.as_global_value().as_pointer_value().into(), dec_b.as_global_value().as_pointer_value().into(), dec_c.as_global_value().as_pointer_value().into(),