021 label jump scope outer ok

✓ 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 {}
input.kz