Function next [src]

Prototype

pub fn next(bc: *BitcodeReader) !?Item

Parameters

bc: *BitcodeReader

Source

pub fn next(bc: *BitcodeReader) !?Item { while (true) { const record = (try bc.nextRecord()) orelse return if (bc.stack.items.len > 1) error.EndOfStream else null; switch (record.id) { else => return .{ .record = record }, Abbrev.Builtin.end_block.toRecordId() => { const block_id = bc.stack.items[bc.stack.items.len - 1].block_id.?; try bc.endBlock(); return .{ .end_block = .{ .name = if (bc.block_info.get(block_id)) |block_info| block_info.block_name else &.{}, .id = block_id, .len = 0, } }; }, Abbrev.Builtin.enter_subblock.toRecordId() => { const block_id: u32 = @intCast(record.operands[0]); switch (block_id) { Block.block_info => try bc.parseBlockInfoBlock(), Block.first_reserved...Block.last_standard => return error.UnsupportedBlockId, else => { try bc.startBlock(block_id, @intCast(record.operands[1])); return .{ .start_block = .{ .name = if (bc.block_info.get(block_id)) |block_info| block_info.block_name else &.{}, .id = block_id, .len = @intCast(record.operands[2]), } }; }, } }, Abbrev.Builtin.define_abbrev.toRecordId() => try bc.stack.items[bc.stack.items.len - 1] .abbrevs.addOwnedAbbrev(bc.allocator, try record.toOwnedAbbrev(bc.allocator)), } } }