Skip to documentation
SLOP

tiny.choir.OperationBuilder

Reference tiny.choir OperationBuilder

Defined in tiny.choir.

API (30)

Actions

Public operations.

Types and contracts

Public types and contracts.

Fields and members

Public fields and members.

No direct callersNo direct callstiny.choirOperationBuilder
Static calls · unresolved targets: unknown · external targets: unknown.

Source

Source: lib/choir/src/core/builder.zig:10

zig
pub const OperationBuilder = struct {    ir_ctx: *Context,    insertion_block: ?*Block,    insertion_before: ?*Operation,    listener: ?Listener,    pub const Listener = struct {        context: ?*anyopaque = null,        notify_operation_inserted: ?*const fn (?*anyopaque, *Operation, InsertPoint) anyerror!void = null,        notify_block_inserted: ?*const fn (?*anyopaque, *Block) anyerror!void = null,        pub fn notifyOperationInserted(self: Listener, op: *Operation, previous: InsertPoint) !void {            if (self.notify_operation_inserted) |notify| {                try notify(self.context, op, previous);            }        }        pub fn notifyBlockInserted(self: Listener, block: *Block) !void {            if (self.notify_block_inserted) |notify| {                try notify(self.context, block);            }        }    };    pub const InsertPoint = struct {        block: ?*Block = null,        before: ?*Operation = null,        pub fn isSet(self: InsertPoint) bool {            return self.block != null;        }    };    pub const InsertionGuard = struct {        builder: ?*OperationBuilder,        insert_point: InsertPoint,        pub fn init(builder: *OperationBuilder) InsertionGuard {            return .{                .builder = builder,                .insert_point = builder.saveInsertionPoint(),            };        }        pub fn deinit(self: *InsertionGuard) void {            const builder = self.builder orelse return;            builder.restoreInsertionPoint(self.insert_point);            self.builder = null;        }    };    pub fn init(ir_ctx: *Context) OperationBuilder {        return .{            .ir_ctx = ir_ctx,            .insertion_block = null,            .insertion_before = null,            .listener = null,        };    }    pub fn setListener(self: *OperationBuilder, listener: ?Listener) void {        self.listener = listener;    }    pub fn getListener(self: *const OperationBuilder) ?Listener {        return self.listener;    }    pub fn clearInsertionPoint(self: *OperationBuilder) void {        self.insertion_block = null;        self.insertion_before = null;    }    pub fn hasInsertionPoint(self: *const OperationBuilder) bool {        return self.insertion_block != null;    }    pub fn saveInsertionPoint(self: *const OperationBuilder) InsertPoint {        return .{            .block = self.insertion_block,            .before = self.insertion_before,        };    }    pub fn restoreInsertionPoint(self: *OperationBuilder, insert_point: InsertPoint) void {        if (insert_point.isSet()) {            self.insertion_block = insert_point.block;            self.insertion_before = insert_point.before;            return;        }        self.clearInsertionPoint();    }    pub fn insertionGuard(self: *OperationBuilder) InsertionGuard {        return InsertionGuard.init(self);    }    pub fn setInsertionPoint(self: *OperationBuilder, block: *Block) void {        self.setInsertionPointToEnd(block);    }    pub fn setInsertionPointToEnd(self: *OperationBuilder, block: *Block) void {        self.insertion_block = block;        self.insertion_before = null;    }    pub fn setInsertionPointBefore(self: *OperationBuilder, op: *Operation) void {        self.insertion_block = op.getBlock();        self.insertion_before = op;    }    pub fn setInsertionPointAfter(self: *OperationBuilder, op: *Operation) void {        if (op.next_op) |next| {            self.setInsertionPointBefore(next);            return;        }        if (op.getBlock()) |block| {            self.setInsertionPointToEnd(block);            return;        }        self.clearInsertionPoint();    }    pub fn getInsertionBlock(self: *const OperationBuilder) ?*Block {        return self.insertion_block;    }    pub fn getInsertionBefore(self: *const OperationBuilder) ?*Operation {        return self.insertion_before;    }    pub fn createBlock(self: *OperationBuilder, region: *Region, arg_types: []const Type, locs: []const Location) !*Block {        if (arg_types.len != locs.len) return error.BlockArgumentLocationMismatch;        const previous = self.saveInsertionPoint();        errdefer self.restoreInsertionPoint(previous);        const block = try region.addBlock();        errdefer std.debug.assert(region.eraseBlock(block));        for (arg_types, locs) |arg_type, loc| {            _ = try block.addArgument(arg_type, loc);        }        self.setInsertionPointToEnd(block);        if (self.listener) |listener| {            try listener.notifyBlockInserted(block);        }        return block;    }    pub fn createBlockWithLoc(self: *OperationBuilder, region: *Region, arg_types: []const Type, loc: Location) !*Block {        const previous = self.saveInsertionPoint();        errdefer self.restoreInsertionPoint(previous);        const block = try region.addBlock();        errdefer std.debug.assert(region.eraseBlock(block));        for (arg_types) |arg_type| {            _ = try block.addArgument(arg_type, loc);        }        self.setInsertionPointToEnd(block);        if (self.listener) |listener| {            try listener.notifyBlockInserted(block);        }        return block;    }    pub fn insert(self: *OperationBuilder, op: *Operation) !*Operation {        var inserted = false;        if (self.insertion_block) |block| {            if (self.insertion_before) |before| {                if (before.getBlock() == block) {                    try block.insertBefore(op, before);                } else {                    try block.addOperation(op);                }            } else {                try block.addOperation(op);            }            inserted = true;        }        if (inserted) {            if (self.listener) |listener| {                listener.notifyOperationInserted(op, .{}) catch |err| {                    if (op.getBlock()) |block| block.detachOperation(op);                    return err;                };            }        }        return op;    }    pub fn create(self: *OperationBuilder, state: Operation.State) !*Operation {        const op = try self.ir_ctx.createOperation(state);        errdefer if (op.getBlock() == null) op.erase();        return try self.insert(op);    }};

Source: lib/choir/src/root.zig:41

zig
pub const OperationBuilder = ir.OperationBuilder;
Called byCallsNo direct callsOperationBuilderinsertionGuardOperationBuilder.InsertionGuardinit
Static calls · unresolved targets: 0 · external targets: 1.
Called byCallsNo direct callsOperationBuilderrestoreInsertionPointOperationBuildersetInsertionPointAftertest sourcelib.choir.src.core.buildertest: OperationBuilder save restore a...OperationBuilderclearInsertionPoint
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallstest sourcelib.choir.src.core.buildertest: OperationBuilder createBlock ad...test sourcelib.choir.src.core.buildertest: OperationBuilder insertion guar...test sourcelib.choir.src.core.buildertest: OperationBuilder listener failu...test sourcelib.choir.src.core.buildertest: OperationBuilder listener recor...test sourcelib.choir.src.core.buildertest: OperationBuilder save restore a...+20 moreOperationBuilderinsertContextcreateOperationOperationBuildercreate
Static calls · unresolved targets: 0 · external targets: 2.
Called byCallstest sourcelib.choir.src.core.buildertest: OperationBuilder block listener...test sourcelib.choir.src.core.buildertest: OperationBuilder createBlock ad...test sourcelib.choir.src.core.buildertest: OperationBuilder createBlock re...test sourcelib.choir.src.core.buildertest: OperationBuilder listener recor...OperationBuilderrestoreInsertionPointOperationBuildersaveInsertionPointOperationBuildersetInsertionPointToEndOperationBuildercreateBlock
Static calls · unresolved targets: 0 · external targets: 4.
Called byCallstest sourcelib.choir.src.core.buildertest: OperationBuilder createBlockWit...OperationBuilderrestoreInsertionPointOperationBuildersaveInsertionPointOperationBuildersetInsertionPointToEndOperationBuildercreateBlockWithLoc
Static calls · unresolved targets: 0 · external targets: 4.
Called byCallsNo direct callstest sourcelib.choir.src.core.buildertest: OperationBuilder block listener...test sourcelib.choir.src.core.buildertest: OperationBuilder createBlock ad...OperationBuildergetInsertionBefore
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callstest sourcelib.choir.src.core.buildertest: OperationBuilder block listener...test sourcelib.choir.src.core.buildertest: OperationBuilder createBlockWit...test sourcelib.choir.src.core.buildertest: OperationBuilder createBlock ad...OperationBuildergetInsertionBlock
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callstest sourcelib.choir.src.core.buildertest: OperationBuilder createBlock re...test sourcelib.choir.src.core.buildertest: OperationBuilder save restore a...OperationBuilderhasInsertionPoint
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callstest sourcelib.choir.src.core.buildertest: OperationBuilder block listener...test sourcelib.choir.src.core.buildertest: OperationBuilder createBlockWit...test sourcelib.choir.src.core.buildertest: OperationBuilder createBlock ad...test sourcelib.choir.src.core.buildertest: OperationBuilder createBlock re...test sourcelib.choir.src.core.buildertest: OperationBuilder insertion guar...+23 moreOperationBuilderinit
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callsOperationBuildercreatetest sourcelib.choir.src.core.buildertest: OperationBuilder listener failu...OperationBuilderinsert
Static calls · unresolved targets: 0 · external targets: 6.
Called byCallstest sourcelib.choir.src.core.buildertest: OperationBuilder insertion guar...OperationBuilder.InsertionGuardinitOperationBuilderinsertionGuard
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsOperationBuildercreateBlockOperationBuildercreateBlockWithLoctest sourcelib.choir.src.core.buildertest: OperationBuilder save restore a...OperationBuilderclearInsertionPointOperationBuilderrestoreInsertionPoint
Static calls · unresolved targets: 0 · external targets: 1.
Called byCallsNo direct callsOperationBuildercreateBlockOperationBuildercreateBlockWithLoctest sourcelib.choir.src.core.buildertest: OperationBuilder save restore a...OperationBuildersaveInsertionPoint
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callersOperationBuildersetInsertionPointToEndOperationBuildersetInsertionPoint
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallstest sourcelib.choir.src.core.buildertest: OperationBuilder save restore a...OperationBuilderclearInsertionPointOperationBuildersetInsertionPointBeforeOperationBuildersetInsertionPointToEndOperationBuildersetInsertionPointAfter
Static calls · unresolved targets: 0 · external targets: 1.
Called byCallsNo direct callsOperationBuildersetInsertionPointAftertest sourcelib.choir.src.core.buildertest: OperationBuilder insertion guar...OperationBuildersetInsertionPointBefore
Static calls · unresolved targets: 0 · external targets: 1.
Called byCallsNo direct callsOperationBuildercreateBlockOperationBuildercreateBlockWithLocOperationBuildersetInsertionPointOperationBuildersetInsertionPointAftertest sourcelib.choir.src.core.buildertest: OperationBuilder block listener...+3 moreOperationBuildersetInsertionPointToEnd
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callstest sourcelib.choir.src.core.buildertest: OperationBuilder block listener...test sourcelib.choir.src.core.buildertest: OperationBuilder listener failu...test sourcelib.choir.src.core.buildertest: OperationBuilder listener recor...OperationBuildersetListener
Static calls · unresolved targets: 0 · external targets: 0.

Also reachable as

backends.wasm.emission.module_encoding.common.ir.OperationBuilder, ir.OperationBuilder.

Complete caller list for OperationBuilder.create

25 direct callers.

Complete caller list for OperationBuilder.init

28 direct callers.

Complete caller list for OperationBuilder.setInsertionPointToEnd

8 direct callers.

Audit

Definitions27
Public names81
Members11
Version26.7.0
Revisiondaab053ee433