✓
Passing This code compiles and runs correctly.
Code
// TEST: Label jump inside @scope should not require passing OUTER obligations
// STATUS: MUST_PASS
//
// The resource is created outside @scope. The label jump occurs inside @scope.
// This should be allowed (outer obligations are suspended).
const std = @import("std");
const Resource = struct { id: i32 };
~event create {}
| created { res: *Resource[open!] }
~proc create {
const r = std.heap.page_allocator.create(Resource) catch unreachable;
r.* = .{ .id = 1 };
return .{ .created = .{ .res = r } };
}
~event close { res: *Resource[!open] }
| closed {}
~proc close {
std.heap.page_allocator.destroy(res);
return .{ .closed = .{} };
}
~pub event with_context {}
| scoped {}
| done {}
~proc with_context {
return .{ .scoped = .{} };
}
~#loop create()
| created c |> with_context()
| scoped _[@scope] |> @loop()
| done |> close(res: c.res)
| closed |> _
pub fn main() void {}