Skip to documentation
SLOP

tiny.choir.backends.wasm.emission.symbols

Reference tiny.choir backends wasm emission symbols

Defined in backends.wasm.emission.

API (5)

Actions

Public operations.

Types and contracts

Public types and contracts.

No direct callersNo direct callsbackends.wasm.emissionsymbols
Static calls · unresolved targets: unknown · external targets: unknown.

Source

Called byCallsNo direct callsbackends.wasm.BackendcompileModuleToArtifactbackends.wasm.emission.inspectioninspectprivate sourcelib.choir.src.backends.wasm.emission.module.s...entryCountprivate sourcelib.choir.src.backends.wasm.emission.module.s...writeBodyprivate sourcelib.choir.src.backends.wasm.emission.module.s...writeBodybackends.wasm.emission.symbols.Iteratorinit
Static calls · unresolved targets: 0 · external targets: 1.
Called byCallsbackends.wasm.BackendcompileModuleToArtifactbackends.wasm.emission.inspectioninspectprivate sourcelib.choir.src.backends.wasm.emission.module.s...entryCountprivate sourcelib.choir.src.backends.wasm.emission.module.s...writeBodyprivate sourcelib.choir.src.backends.wasm.emission.module.s...writeBodyprivate sourcelib.choir.src.backends.wasm.emission.symbolsshouldExportbackends.wasm.emission.symbols.Iteratornext
Static calls · unresolved targets: 0 · external targets: 3.

Source: lib/choir/src/backends/wasm/emission/root.zig:11

zig
pub const symbols = @import("symbols.zig");

Source: lib/choir/src/backends/wasm/emission/symbols.zig

zig
const std = @import("std");const ir = @import("../../../core/root.zig");const dialects = @import("../../../dialects/root.zig");const emission = @import("root.zig");const BuiltinDialect = dialects.BuiltinDialect;const FuncDialect = dialects.FuncDialect;pub const Role = enum {    required,    provided,};pub const Symbol = struct {    name: []const u8,    role: Role,    function_ordinal: usize,};pub const Iterator = struct {    operations: ir.Block.OperationIterator,    options: emission.Options,    function_ordinal: usize = 0,    pub fn init(module: *ir.Operation, options: emission.Options) emission.Error!Iterator {        if (!std.mem.eql(u8, module.name.name, BuiltinDialect.ModuleOp.operation_name)) {            return error.CodeGenFailed;        }        const module_op = BuiltinDialect.ModuleOp{ .op = module };        return .{            .operations = module_op.getBodyBlock().getOperations(),            .options = options,        };    }    pub fn next(self: *Iterator) emission.Error!?Symbol {        while (self.operations.next()) |operation| {            const function_ordinal = self.function_ordinal;            self.function_ordinal = std.math.add(                usize,                self.function_ordinal,                1,            ) catch return error.CapacityOverflow;            if (!std.mem.eql(u8, operation.name.name, FuncDialect.FuncOp.operation_name)) {                return error.CodeGenFailed;            }            const function = FuncDialect.FuncOp{ .op = operation };            const name = function.getName() orelse return error.CodeGenFailed;            if (function.isDeclaration()) {                return .{                    .name = name,                    .role = .required,                    .function_ordinal = function_ordinal,                };            }            if (shouldExport(operation, name, self.options.entry)) {                return .{                    .name = name,                    .role = .provided,                    .function_ordinal = function_ordinal,                };            }        }        return null;    }};fn shouldExport(    operation: *ir.Operation,    name: []const u8,    entry: ?[]const u8,) bool {    if (entry) |requested| return std.mem.eql(u8, requested, name);    return ir.SymbolTable.getSymbolVisibility(operation) == .public;}test {    std.testing.refAllDecls(@This());}

Audit

Definitions6
Public names6
Members8
Version26.7.0
Revisiondaab053ee433