| ... | @@ -98,3 +98,35 @@ fn await_seq(c: u8) void { | ... | @@ -98,3 +98,35 @@ fn await_seq(c: u8) void { |
| 98 | await_points[await_seq_index] = c; | 98 | await_points[await_seq_index] = c; |
| 99 | await_seq_index += 1; | 99 | await_seq_index += 1; |
| 100 | } | 100 | } |
| | 101 | |
| | 102 | |
| | 103 | var early_final_result: i32 = 0; |
| | 104 | |
| | 105 | test "coroutine await early return" { |
| | 106 | early_seq('a'); |
| | 107 | const p = async(std.debug.global_allocator) early_amain() catch unreachable; |
| | 108 | early_seq('f'); |
| | 109 | assert(early_final_result == 1234); |
| | 110 | assert(std.mem.eql(u8, early_points, "abcdef")); |
| | 111 | } |
| | 112 | |
| | 113 | async fn early_amain() void { |
| | 114 | early_seq('b'); |
| | 115 | const p = async early_another() catch unreachable; |
| | 116 | early_seq('d'); |
| | 117 | early_final_result = await p; |
| | 118 | early_seq('e'); |
| | 119 | } |
| | 120 | |
| | 121 | async fn early_another() i32 { |
| | 122 | early_seq('c'); |
| | 123 | return 1234; |
| | 124 | } |
| | 125 | |
| | 126 | var early_points = []u8{0} ** "abcdef".len; |
| | 127 | var early_seq_index: usize = 0; |
| | 128 | |
| | 129 | fn early_seq(c: u8) void { |
| | 130 | early_points[early_seq_index] = c; |
| | 131 | early_seq_index += 1; |
| | 132 | } |