Function extraData [src]

Returns the requested data, as well as the new index which is at the start of the trailers for the object.

Prototype

pub fn extraData(code: Zir, comptime T: type, index: usize) ExtraData(T)

Parameters

code: ZirT: typeindex: usize

Source

pub fn extraData(code: Zir, comptime T: type, index: usize) ExtraData(T) { const fields = @typeInfo(T).@"struct".fields; var i: usize = index; var result: T = undefined; inline for (fields) |field| { @field(result, field.name) = switch (field.type) { u32 => code.extra[i], Inst.Ref, Inst.Index, Inst.Declaration.Name, std.zig.SimpleComptimeReason, NullTerminatedString, // Ast.TokenIndex is missing because it is a u32. Ast.OptionalTokenIndex, Ast.Node.Index, Ast.Node.OptionalIndex, => @enumFromInt(code.extra[i]), Ast.TokenOffset, Ast.OptionalTokenOffset, Ast.Node.Offset, Ast.Node.OptionalOffset, => @enumFromInt(@as(i32, @bitCast(code.extra[i]))), Inst.Call.Flags, Inst.BuiltinCall.Flags, Inst.SwitchBlock.Bits, Inst.SwitchBlockErrUnion.Bits, Inst.FuncFancy.Bits, Inst.Declaration.Flags, Inst.Param.Type, Inst.Func.RetTy, => @bitCast(code.extra[i]), else => @compileError("bad field type"), }; i += 1; } return .{ .data = result, .end = i, }; }