// `push ` 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"); }