Fix plumbing

This commit is contained in:
tarjei 2021-05-29 22:11:38 +02:00
parent 107822a5cc
commit ade591dd10
6 changed files with 22 additions and 14 deletions

View file

@ -722,6 +722,16 @@ pub fn listAppend(list: RocList, alignment: u32, element: Opaque, element_width:
return output; return output;
} }
pub fn listSwap(
list: RocList,
alignment: u32,
element_width: usize,
index_1: usize,
index_2: usize,
) callconv(.C) RocList {
return RocList.empty();
}
pub fn listDrop( pub fn listDrop(
list: RocList, list: RocList,
alignment: u32, alignment: u32,

View file

@ -1885,13 +1885,13 @@ fn list_set(symbol: Symbol, var_store: &mut VarStore) -> Def {
} }
/// List.swap : List elem, Nat, Nat -> List elem /// List.swap : List elem, Nat, Nat -> List elem
fn list_drop(symbol: Symbol, var_store: &mut VarStore) -> Def { fn list_swap(symbol: Symbol, var_store: &mut VarStore) -> Def {
let list_var = var_store.fresh(); let list_var = var_store.fresh();
let index1_var = var_store.fresh(); let index1_var = var_store.fresh();
let index2_var = var_store.fresh(); let index2_var = var_store.fresh();
let body = RunLowLevel { let body = RunLowLevel {
op: LowLevel::ListDrop, op: LowLevel::ListSwap,
args: vec![ args: vec![
(list_var, Var(Symbol::ARG_1)), (list_var, Var(Symbol::ARG_1)),
(index1_var, Var(Symbol::ARG_2)), (index1_var, Var(Symbol::ARG_2)),

View file

@ -4171,15 +4171,16 @@ fn run_low_level<'a, 'ctx, 'env>(
let (list, list_layout) = load_symbol_and_layout(scope, &args[0]); let (list, list_layout) = load_symbol_and_layout(scope, &args[0]);
let original_wrapper = list.into_struct_value(); let original_wrapper = list.into_struct_value();
let count = load_symbol(scope, &args[1]); let index_1 = load_symbol(scope, &args[1]);
let index_2 = load_symbol(scope, &args[2]);
match list_layout { match list_layout {
Layout::Builtin(Builtin::EmptyList) => empty_list(env), Layout::Builtin(Builtin::EmptyList) => empty_list(env),
Layout::Builtin(Builtin::List(element_layout)) => list_swap( Layout::Builtin(Builtin::List(element_layout)) => list_swap(
env, env,
layout_ids,
original_wrapper, original_wrapper,
count.into_int_value(), index_1.into_int_value(),
index_2.into_int_value(),
element_layout, element_layout,
), ),
_ => unreachable!("Invalid layout {:?} in List.swap", list_layout), _ => unreachable!("Invalid layout {:?} in List.swap", list_layout),

View file

@ -307,19 +307,19 @@ pub fn list_append<'a, 'ctx, 'env>(
/// List.swap : List elem, Nat, Nat -> List elem /// List.swap : List elem, Nat, Nat -> List elem
pub fn list_swap<'a, 'ctx, 'env>( pub fn list_swap<'a, 'ctx, 'env>(
env: &Env<'a, 'ctx, 'env>, env: &Env<'a, 'ctx, 'env>,
layout_ids: &mut LayoutIds<'a>,
original_wrapper: StructValue<'ctx>, original_wrapper: StructValue<'ctx>,
count: IntValue<'ctx>, index_1: IntValue<'ctx>,
index_2: IntValue<'ctx>,
element_layout: &Layout<'a>, element_layout: &Layout<'a>,
) -> BasicValueEnum<'ctx> { ) -> BasicValueEnum<'ctx> {
let dec_element_fn = build_dec_wrapper(env, layout_ids, &element_layout);
call_bitcode_fn_returns_list( call_bitcode_fn_returns_list(
env, env,
&[ &[
pass_list_as_i128(env, original_wrapper.into()), pass_list_as_i128(env, original_wrapper.into()),
env.alignment_intvalue(&element_layout), env.alignment_intvalue(&element_layout),
layout_width(env, &element_layout), layout_width(env, &element_layout),
count.into(), index_1.into(),
index_2.into(),
], ],
&bitcode::LIST_SWAP, &bitcode::LIST_SWAP,
) )

View file

@ -40,6 +40,7 @@ pub enum LowLevel {
ListKeepErrs, ListKeepErrs,
ListSortWith, ListSortWith,
ListDrop, ListDrop,
ListSwap,
DictSize, DictSize,
DictEmpty, DictEmpty,
DictInsert, DictInsert,

View file

@ -181,11 +181,7 @@ fn list_drop() {
#[test] #[test]
fn list_swap() { fn list_swap() {
assert_evals_to!( assert_evals_to!("List.swap [] 0 1", RocList::from_slice(&[]), RocList<i64>);
"List.swap [] 0 1",
RocList::from_slice(&[]),
RocList<i64>
);
assert_evals_to!( assert_evals_to!(
"List.swap [ 0 ] 1 2", "List.swap [ 0 ] 1 2",
RocList::from_slice(&[0]), RocList::from_slice(&[0]),