feature. See also
. The project being documented here (as the example) is the Zig library itself.
BitcodeReader.startBlock
fn startBlock(bc: *BitcodeReader, block_id: ?u32, new_abbrev_len: u6) !void
File
Code
fn startBlock(bc: *BitcodeReader, block_id: ?u32, new_abbrev_len: u6) !void {
const abbrevs = if (block_id) |id|
if (bc.block_info.get(id)) |block_info| block_info.abbrevs.abbrevs.items else &.{}
else
&.{};
const state = try bc.stack.addOne(bc.allocator);
state.* = .{
.block_id = block_id,
.abbrev_id_width = new_abbrev_len,
.abbrevs = .{ .abbrevs = .empty },
};
try state.abbrevs.abbrevs.ensureTotalCapacity(
bc.allocator,
@typeInfo(Abbrev.Builtin).@"enum".field_names.len + abbrevs.len,
);
assert(state.abbrevs.abbrevs.items.len == @backingInt(Abbrev.Builtin.end_block));
try state.abbrevs.addAbbrevAssumeCapacity(bc.allocator, .{
.operands = &.{
.{ .literal = Abbrev.Builtin.end_block.toRecordId() },
.align_32_bits,
},
});
assert(state.abbrevs.abbrevs.items.len == @backingInt(Abbrev.Builtin.enter_subblock));
try state.abbrevs.addAbbrevAssumeCapacity(bc.allocator, .{
.operands = &.{
.{ .literal = Abbrev.Builtin.enter_subblock.toRecordId() },
.{ .encoding = .{ .vbr = 8 } },
.{ .encoding = .{ .vbr = 4 } },
.align_32_bits,
.block_len,
},
});
assert(state.abbrevs.abbrevs.items.len == @backingInt(Abbrev.Builtin.define_abbrev));
try state.abbrevs.addAbbrevAssumeCapacity(bc.allocator, .{
.operands = &.{
.{ .literal = Abbrev.Builtin.define_abbrev.toRecordId() },
.{ .encoding = .{ .array = 5 } },
.abbrev_op,
},
});
assert(state.abbrevs.abbrevs.items.len == @backingInt(Abbrev.Builtin.unabbrev_record));
try state.abbrevs.addAbbrevAssumeCapacity(bc.allocator, .{
.operands = &.{
.{ .encoding = .{ .vbr = 6 } },
.{ .encoding = .{ .array = 6 } },
.{ .encoding = .{ .vbr = 6 } },
},
});
assert(state.abbrevs.abbrevs.items.len == @typeInfo(Abbrev.Builtin).@"enum".field_names.len);
for (abbrevs) |abbrev| try state.abbrevs.addAbbrevAssumeCapacity(bc.allocator, abbrev);
}