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

Reply via email to