| ... | ... | @@ -98,3 +98,35 @@ fn await_seq(c: u8) void { |
| 98 | 98 | await_points[await_seq_index] = c; |
| 99 | 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 | } |