From 4d42d81c63a786d16a66e17d55ad58ddfc154734 Mon Sep 17 00:00:00 2001 From: Brendan Hansknecht Date: Sun, 27 Feb 2022 01:21:02 -0800 Subject: [PATCH] add broken attempt to get list.set to use list.replace under the hood --- compiler/can/src/builtins.rs | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/compiler/can/src/builtins.rs b/compiler/can/src/builtins.rs index dbc5063359..acec8fc84c 100644 --- a/compiler/can/src/builtins.rs +++ b/compiler/can/src/builtins.rs @@ -2408,6 +2408,7 @@ fn list_set(symbol: Symbol, var_store: &mut VarStore) -> Def { let bool_var = var_store.fresh(); let len_var = var_store.fresh(); let elem_var = var_store.fresh(); + let replace_record_var = var_store.fresh(); let list_arg_var = var_store.fresh(); // Uniqueness type Attr differs between let list_ret_var = var_store.fresh(); // the arg list and the returned list @@ -2437,18 +2438,24 @@ fn list_set(symbol: Symbol, var_store: &mut VarStore) -> Def { }, ), // then-branch - no_region( - // List.setUnsafe list index elem - RunLowLevel { - op: LowLevel::ListSet, - args: vec![ - (list_arg_var, Var(arg_list)), - (len_var, Var(arg_index)), - (elem_var, Var(arg_elem)), - ], - ret_var: list_ret_var, - }, - ), + no_region(Access { + record_var: replace_record_var, + ext_var: var_store.fresh(), + field_var: list_ret_var, + loc_expr: Box::new(no_region( + // List.replaceUnsafe list index elem + RunLowLevel { + op: LowLevel::ListReplaceUnsafe, + args: vec![ + (list_arg_var, Var(arg_list)), + (len_var, Var(arg_index)), + (elem_var, Var(arg_elem)), + ], + ret_var: replace_record_var, + }, + )), + field: "list".into(), + }), )], final_else: Box::new( // else-branch