This actually makes things more confusing. Your version seems equivalent to the original, why does it work ? For reference, here's the `--expandArc:insert` result for: The original var node :tmpD node = ListNode[T](val: :tmpD = val_1 :tmpD) if prev == nil: `=copy`(list.first, node) else: node.prev_1_cursor = prev `=copy`(prev.next, node) if next_1 == nil: list.last_cursor = node else: `=copy`(node.next, next_1) next_1.prev_1_cursor = node list.len += 1 `=destroy`(node) Run var node :tmpD :tmpD_1 node = ListNode[T](val: :tmpD = val_1 :tmpD, prev_cursor: prev_1, next: `=wasMoved`(:tmpD_1) `=copy`(:tmpD_1, next_1) :tmpD_1) if prev_1 == nil: `=copy`(list.first, node) else: `=copy`(prev_1.next, node) if next_1 == nil: `=sink`(list.last, node) `=wasMoved`(node) else: next_1.prev_cursor = node list.len += 1 `=destroy`(node) Run
here's a diff: @@ -1,19 +1,22 @@ var node :tmpD + :tmpD_1 node = ListNode[T](val: :tmpD = val_1 - :tmpD) -if prev == nil: + :tmpD, prev_cursor: prev_1, next: + `=wasMoved`(:tmpD_1) + `=copy`(:tmpD_1, next_1) + :tmpD_1) +if prev_1 == nil: `=copy`(list.first, node) else: - node.prev_1_cursor = prev - `=copy`(prev.next, node) + `=copy`(prev_1.next, node) if next_1 == nil: - list.last_cursor = node + `=sink`(list.last, node) + `=wasMoved`(node) else: - `=copy`(node.next, next_1) - next_1.prev_1_cursor = node + next_1.prev_cursor = node list.len += 1 `=destroy`(node) Run