lib/accy/src/kernel/model/program/guard/root.zig
daab053ee43316e1809a84551d573ddd1e5bf3d2
1 const builder = @import("../../core/root.zig").builder;
2
3 pub fn Guard(comptime Owner: type) type {
4 return struct {
5 owner: *Owner,
6 previous: builder.Block,
7 else_block: builder.Block,
8 active: bool = true,
9
10 pub fn leave(self: *@This()) !void {
11 if (!self.active) return;
12 errdefer self.owner.setInsertionBlock(self.previous);
13 try self.owner.yield_(&.{});
14 self.owner.setInsertionBlock(self.else_block);
15 try self.owner.yield_(&.{});
16 self.owner.setInsertionBlock(self.previous);
17 self.active = false;
18 }
19
20 pub fn abort(self: *@This()) void {
21 if (!self.active) return;
22 self.owner.setInsertionBlock(self.previous);
23 self.active = false;
24 }
25 };
26 }