DoxigAlpha

toOwnedBundle

Function parameters

Parameters

#
wip:*Wip
compile_log_text:[]const u8

Type definitions in this namespace

Types

#
ErrorMessageList
There will be a MessageIndex for each len at start.
SourceLocation
Trailing:
ErrorMessage
Trailing:

Functions in this namespace

Functions

#
nullTerminatedString
Given an index into `string_bytes` returns the null-terminated string found there.

Special encoding when there are no errors.

Values

#
empty
Special encoding when there are no errors.

Source

Implementation

#
pub fn toOwnedBundle(wip: *Wip, compile_log_text: []const u8) !ErrorBundle {
    const gpa = wip.gpa;
    if (wip.root_list.items.len == 0) {
        assert(compile_log_text.len == 0);
        // Special encoding when there are no errors.
        wip.deinit();
        wip.* = .{
            .gpa = gpa,
            .string_bytes = .{},
            .extra = .{},
            .root_list = .{},
        };
        return empty;
    }

    const compile_log_str_index = if (compile_log_text.len == 0) 0 else str: {
        const str: u32 = @intCast(wip.string_bytes.items.len);
        try wip.string_bytes.ensureUnusedCapacity(gpa, compile_log_text.len + 1);
        wip.string_bytes.appendSliceAssumeCapacity(compile_log_text);
        wip.string_bytes.appendAssumeCapacity(0);
        break :str str;
    };

    wip.setExtra(0, ErrorMessageList{
        .len = @intCast(wip.root_list.items.len),
        .start = @intCast(wip.extra.items.len),
        .compile_log_text = compile_log_str_index,
    });
    try wip.extra.appendSlice(gpa, @as([]const u32, @ptrCast(wip.root_list.items)));
    wip.root_list.clearAndFree(gpa);
    return .{
        .string_bytes = try wip.string_bytes.toOwnedSlice(gpa),
        .extra = try wip.extra.toOwnedSlice(gpa),
    };
}