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 }