| ... | @@ -94,11 +94,13 @@ pub fn Channel(comptime T: type) type { | ... | @@ -94,11 +94,13 @@ pub fn Channel(comptime T: type) type { |
| 94 | /// buffer, or in the case of a zero size buffer, when the item has been retrieved by a getter. | 94 | /// buffer, or in the case of a zero size buffer, when the item has been retrieved by a getter. |
| 95 | /// Or when the channel is destroyed. | 95 | /// Or when the channel is destroyed. |
| 96 | pub fn put(self: *SelfChannel, data: T) void { | 96 | pub fn put(self: *SelfChannel, data: T) void { |
| 97 | var my_tick_node = Loop.NextTickNode.init(@frame()); | 97 | var my_tick_node = Loop.NextTickNode{ .data = @frame() }; |
| 98 | var queue_node = std.atomic.Queue(PutNode).Node.init(PutNode{ | 98 | var queue_node = std.atomic.Queue(PutNode).Node{ |
| 99 | .tick_node = &my_tick_node, | 99 | .data = PutNode{ |
| 100 | .data = data, | 100 | .tick_node = &my_tick_node, |
| 101 | }); | 101 | .data = data, |
| | 102 | }, |
| | 103 | }; |
| 102 | | 104 | |
| 103 | suspend { | 105 | suspend { |
| 104 | self.putters.put(&queue_node); | 106 | self.putters.put(&queue_node); |
| ... | @@ -113,13 +115,15 @@ pub fn Channel(comptime T: type) type { | ... | @@ -113,13 +115,15 @@ pub fn Channel(comptime T: type) type { |
| 113 | pub fn get(self: *SelfChannel) callconv(.Async) T { | 115 | pub fn get(self: *SelfChannel) callconv(.Async) T { |
| 114 | // TODO https://github.com/ziglang/zig/issues/2765 | 116 | // TODO https://github.com/ziglang/zig/issues/2765 |
| 115 | var result: T = undefined; | 117 | var result: T = undefined; |
| 116 | var my_tick_node = Loop.NextTickNode.init(@frame()); | 118 | var my_tick_node = Loop.NextTickNode{ .data = @frame() }; |
| 117 | var queue_node = std.atomic.Queue(GetNode).Node.init(GetNode{ | 119 | var queue_node = std.atomic.Queue(GetNode).Node{ |
| 118 | .tick_node = &my_tick_node, | 120 | .data = GetNode{ |
| 119 | .data = GetNode.Data{ | 121 | .tick_node = &my_tick_node, |
| 120 | .Normal = GetNode.Normal{ .ptr = &result }, | 122 | .data = GetNode.Data{ |
| | 123 | .Normal = GetNode.Normal{ .ptr = &result }, |
| | 124 | }, |
| 121 | }, | 125 | }, |
| 122 | }); | 126 | }; |
| 123 | | 127 | |
| 124 | suspend { | 128 | suspend { |
| 125 | self.getters.put(&queue_node); | 129 | self.getters.put(&queue_node); |
| ... | @@ -145,17 +149,19 @@ pub fn Channel(comptime T: type) type { | ... | @@ -145,17 +149,19 @@ pub fn Channel(comptime T: type) type { |
| 145 | // TODO integrate this function with named return values | 149 | // TODO integrate this function with named return values |
| 146 | // so we can get rid of this extra result copy | 150 | // so we can get rid of this extra result copy |
| 147 | var result: ?T = null; | 151 | var result: ?T = null; |
| 148 | var my_tick_node = Loop.NextTickNode.init(@frame()); | 152 | var my_tick_node = Loop.NextTickNode{ .data = @frame() }; |
| 149 | var or_null_node = std.atomic.Queue(*std.atomic.Queue(GetNode).Node).Node.init(undefined); | 153 | var or_null_node = std.atomic.Queue(*std.atomic.Queue(GetNode).Node).Node{ .data = undefined }; |
| 150 | var queue_node = std.atomic.Queue(GetNode).Node.init(GetNode{ | 154 | var queue_node = std.atomic.Queue(GetNode).Node{ |
| 151 | .tick_node = &my_tick_node, | 155 | .data = GetNode{ |
| 152 | .data = GetNode.Data{ | 156 | .tick_node = &my_tick_node, |
| 153 | .OrNull = GetNode.OrNull{ | 157 | .data = GetNode.Data{ |
| 154 | .ptr = &result, | 158 | .OrNull = GetNode.OrNull{ |
| 155 | .or_null = &or_null_node, | 159 | .ptr = &result, |
| | 160 | .or_null = &or_null_node, |
| | 161 | }, |
| 156 | }, | 162 | }, |
| 157 | }, | 163 | }, |
| 158 | }); | 164 | }; |
| 159 | or_null_node.data = &queue_node; | 165 | or_null_node.data = &queue_node; |
| 160 | | 166 | |
| 161 | suspend { | 167 | suspend { |