// `push <Context>` where Context's first field is an `#inline` protocol
// (`allocator: Allocator`) and the value being pushed is an `Arena` upcast to
// that protocol. Exercises save/restore of the boxed context across the push.

#import "modules/std.sx";
#import "modules/allocators.sx";

main :: () -> void {
    arena : Arena = ---;
    arena.create(context.allocator, 4096);

    new_ctx := Context.{ allocator = xx @arena, data = context.data };
    push new_ctx {
        ptr := context.allocator.alloc(128);
        out("inside push\n");
    }
    out("after push\n");
}
