✓
Passing This code compiles and runs correctly.
Code
// Minimal repro for nested recursive event with labels codegen bug
// Issue: Complex nested recursion with multiple labels generates invalid Zig
// Pattern: .continue_outer => , (missing expression)
~event outer_step { i: u32 }
| continue_outer { i: u32 }
| done_outer { i: u32 }
~proc outer_step {
if (i < 2) {
return .{ .continue_outer = .{ .i = i } };
} else {
return .{ .done_outer = .{ .i = i } };
}
}
~event inner_step { i: u32, j: u32 }
| continue_inner { i: u32, j: u32 }
| done_inner { i: u32 }
~proc inner_step {
if (j < 2) {
return .{ .continue_inner = .{ .i = i, .j = j } };
} else {
return .{ .done_inner = .{ .i = i } };
}
}
~event process_pair { i: u32, j: u32 }
| processed { i: u32, j: u32 }
~proc process_pair {
return .{ .processed = .{ .i = i, .j = j } };
}
// Nested recursive loop with labels
~event nested_loop { start: u32 }
| done { result: u32 }
~nested_loop = outer_step(i: start)
| continue_outer outer |> #inner_start inner_step(i: outer.i, j: 0)
| continue_inner inner |> process_pair(i: inner.i, j: inner.j)
| processed p |> @inner_start(i: p.i, j: p.j + 1)
| done_inner done_i |> outer_step(i: done_i.i + 1)
| continue_outer co2 |> @inner_start(i: co2.i, j: 0)
| done_outer done_o |> done { result: done_o.i }
| done_outer done_o |> done { result: done_o.i }
~nested_loop(start: 0)
| done _ |> _