@@ -16,7 +16,17 @@ let create () =
1616 Loc. set next list ;
1717 list
1818
19- let create_node ~prev ~next value =
19+ let create_node value =
20+ let node =
21+ let node_prev = Loc. make (Obj. magic () )
22+ and node_next = Loc. make (Obj. magic () ) in
23+ { node_prev; node_next; value }
24+ in
25+ Loc. set node.node_prev (as_list node);
26+ Loc. set node.node_next (as_list node);
27+ node
28+
29+ let create_node_with ~prev ~next value =
2030 { node_prev = Loc. make prev; node_next = Loc. make next; value }
2131
2232module Xt = struct
@@ -41,7 +51,7 @@ module Xt = struct
4151
4252 let add_l ~xt value list =
4353 let next = Xt. get ~xt list .next in
44- let node = create_node ~prev: list ~next value in
54+ let node = create_node_with ~prev: list ~next value in
4555 Xt. set ~xt list .next (as_list node);
4656 Xt. set ~xt next.prev (as_list node);
4757 node
@@ -56,7 +66,7 @@ module Xt = struct
5666
5767 let add_r ~xt value list =
5868 let prev = Xt. get ~xt list .prev in
59- let node = create_node ~prev ~next: list value in
69+ let node = create_node_with ~prev ~next: list value in
6070 Xt. set ~xt list .prev (as_list node);
6171 Xt. set ~xt prev.next (as_list node);
6272 node
@@ -163,11 +173,11 @@ let remove node = Kcas.Xt.commit { tx = Xt.remove node }
163173let is_empty list = Loc. get list .prev == list
164174
165175let add_l value list =
166- let node = create_node ~prev: list ~next: list value in
176+ let node = create_node_with ~prev: list ~next: list value in
167177 Kcas.Xt. commit { tx = Xt. add_node_l node list }
168178
169179let add_r value list =
170- let node = create_node ~prev: list ~next: list value in
180+ let node = create_node_with ~prev: list ~next: list value in
171181 Kcas.Xt. commit { tx = Xt. add_node_r node list }
172182
173183let move_l node list = Kcas.Xt. commit { tx = Xt. move_l node list }
0 commit comments