✓
Passing This code compiles and runs correctly.
Code
// FIXED: Nested same-branch name no longer causes Zig shadowing error
//
// Previously: When the same branch name (e.g., `done`) appeared at multiple nesting
// levels, the emitter generated captures even when they weren't used.
//
// Fix: Now only captures bindings that are actually referenced in the code.
~import "$std/control"
const std = @import("std");
const Resource = struct {
id: usize,
data: [64]u8,
};
~event create { id: usize }
| created { r: *Resource[active!] }
~proc create {
const r = std.heap.page_allocator.create(Resource) catch unreachable;
r.* = Resource{ .id = id, .data = undefined };
return .{ .created = .{ .r = r } };
}
~event work { r: *Resource[active] }
| done {}
~proc work {
r.data[0] +%= 1;
return .{ .done = .{} };
}
~event destroy { r: *Resource[!active] }
| destroyed {}
~proc destroy {
std.heap.page_allocator.destroy(r);
return .{ .destroyed = .{} };
}
~event run_one { id: usize }
| finished {}
~run_one = create(id: id)
| created r |>
work(r: r.r)
| done |>
work(r: r.r)
| done |>
work(r: r.r)
| done |>
work(r: r.r)
| done |>
work(r: r.r)
| done |>
destroy(r: r.r)
| destroyed |> finished {}
~for(0..10)
| each _ |>
run_one(id: 0)
| finished |> _
| done |> _
pub fn main() void {}
Test Configuration
MUST_RUN