From 48d2f53eb199067fee5ca67bb1b574e1bf3a511d Mon Sep 17 00:00:00 2001 From: Folkert Date: Sun, 25 Jul 2021 12:50:42 +0200 Subject: [PATCH] create a new heap cell after modification --- compiler/mono/src/alias_analysis.rs | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/compiler/mono/src/alias_analysis.rs b/compiler/mono/src/alias_analysis.rs index 2f43fd13db..efe7c01712 100644 --- a/compiler/mono/src/alias_analysis.rs +++ b/compiler/mono/src/alias_analysis.rs @@ -842,7 +842,19 @@ fn lowlevel_spec( builder.add_bag_insert(block, bag, to_insert)?; - Ok(list) + let new_cell = builder.add_new_heap_cell(block)?; + builder.add_make_tuple(block, &[new_cell, bag]) + } + ListSwap => { + let list = env.symbols[&arguments[0]]; + + let bag = builder.add_get_tuple_field(block, list, LIST_BAG_INDEX)?; + let cell = builder.add_get_tuple_field(block, list, LIST_CELL_INDEX)?; + + let _unit = builder.add_update(block, update_mode_var, cell)?; + + let new_cell = builder.add_new_heap_cell(block)?; + builder.add_make_tuple(block, &[new_cell, bag]) } ListAppend => { let list = env.symbols[&arguments[0]]; @@ -853,9 +865,11 @@ fn lowlevel_spec( let _unit = builder.add_update(block, update_mode_var, cell)?; + // TODO new heap cell builder.add_bag_insert(block, bag, to_insert)?; - Ok(list) + let new_cell = builder.add_new_heap_cell(block)?; + builder.add_make_tuple(block, &[new_cell, bag]) } DictEmpty => { match layout { @@ -887,7 +901,6 @@ fn lowlevel_spec( let cell = builder.add_get_tuple_field(block, dict, DICT_CELL_INDEX)?; let _unit = builder.add_touch(block, cell)?; - builder.add_bag_get(block, bag) } DictInsert => { @@ -904,7 +917,8 @@ fn lowlevel_spec( builder.add_bag_insert(block, bag, key_value)?; - Ok(dict) + let new_cell = builder.add_new_heap_cell(block)?; + builder.add_make_tuple(block, &[new_cell, bag]) } _other => { // println!("missing {:?}", _other);