Zig 0.17.0-dev (Split by item) This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig standard library.
std › zig › Zir › getStructDecl Public Function getStructDecl Doc Source 5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344 pub fn getStructDecl (zir : *const Zir , struct_decl : Inst .Index ) UnwrappedStructDecl {
const inst_data = zir .instructions .get (@backingInt (struct_decl ));
assert (inst_data .tag == .extended );
assert (inst_data .data .extended .opcode == .struct_decl );
const small : Inst .StructDecl .Small = @bitCast (inst_data .data .extended .small );
const extra = zir .extraData (Inst .StructDecl , inst_data .data .extended .operand );
var extra_index = extra .end ;
const captures_len : u32 = if (small .has_captures_len ) blk : {
const captures_len = zir .extra [extra_index ];
extra_index += 1 ;
break :blk captures_len ;
} else 0 ;
const decls_len : u32 = if (small .has_decls_len ) blk : {
const decls_len = zir .extra [extra_index ];
extra_index += 1 ;
break :blk decls_len ;
} else 0 ;
const fields_len : u32 = if (small .has_fields_len ) blk : {
const fields_len = zir .extra [extra_index ];
extra_index += 1 ;
break :blk fields_len ;
} else 0 ;
const backing_int_type_body_len : u32 = if (small .has_backing_int_type ) len : {
const body_len = zir .extra [extra_index ];
extra_index += 1 ;
break :len body_len ;
} else 0 ;
const captures : []const Inst .Capture = @ptrCast (zir .extra [extra_index ..][0 ..captures_len ]);
extra_index += captures_len ;
const capture_names : []const NullTerminatedString = @ptrCast (zir .extra [extra_index ..][0 ..captures_len ]);
extra_index += captures_len ;
const decls : []const Inst .Index = @ptrCast (zir .extra [extra_index ..][0 ..decls_len ]);
extra_index += decls_len ;
const field_names : []const NullTerminatedString = @ptrCast (zir .extra [extra_index ..][0 ..fields_len ]);
extra_index += fields_len ;
const field_type_body_lens : []const u32 = @ptrCast (zir .extra [extra_index ..][0 ..fields_len ]);
extra_index += fields_len ;
const field_align_body_lens : ?[]const u32 = if (small .any_field_aligns ) lens : {
const lens = zir .extra [extra_index ..][0 ..fields_len ];
extra_index += fields_len ;
break :lens @ptrCast (lens );
} else null ;
const field_default_body_lens : ?[]const u32 = if (small .any_field_defaults ) lens : {
const lens = zir .extra [extra_index ..][0 ..fields_len ];
extra_index += fields_len ;
break :lens @ptrCast (lens );
} else null ;
const field_comptime_bits : ?[]const u32 = if (small .any_comptime_fields ) bits : {
const bits_len = @divCeil (fields_len , 32 );
const bits = zir .extra [extra_index ..][0 ..bits_len ];
extra_index += bits_len ;
break :bits bits ;
} else null ;
const backing_int_type_body : ?[]const Zir .Inst .Index = switch (backing_int_type_body_len ) {
0 => null ,
else => |n | zir .bodySlice (extra_index , n ),
};
extra_index += backing_int_type_body_len ;
const field_bodies_overlong : []const Inst .Index = @ptrCast (zir .extra [extra_index ..]);
return .{
.src_line = extra .data .src_line ,
.src_column = extra .data .src_column ,
.src_node = extra .data .src_node ,
.name_strategy = small .name_strategy ,
.captures = captures ,
.capture_names = capture_names ,
.decls = decls ,
.layout = small .layout ,
.backing_int_type_body = backing_int_type_body ,
.field_names = field_names ,
.field_type_body_lens = field_type_body_lens ,
.field_align_body_lens = field_align_body_lens ,
.field_default_body_lens = field_default_body_lens ,
.field_comptime_bits = field_comptime_bits ,
.field_bodies_overlong = field_bodies_overlong ,
};
}