struct Subprogram [src]
Fields
file: Metadata
name: MetadataString
linkage_name: MetadataString
line: u32
scope_line: u32
ty: Metadata
di_flags: DIFlags
compile_unit: Metadata
 Members
Source
 pub const Subprogram = struct {
    pub const Options = struct {
        di_flags: DIFlags,
        sp_flags: DISPFlags,
    };
    pub const DISPFlags = packed struct(u32) {
        Virtuality: enum(u2) { Zero, Virtual, PureVirtual } = .Zero,
        LocalToUnit: bool = false,
        Definition: bool = false,
        Optimized: bool = false,
        Pure: bool = false,
        Elemental: bool = false,
        Recursive: bool = false,
        MainSubprogram: bool = false,
        Deleted: bool = false,
        ReservedBit10: u1 = 0,
        ObjCDirect: bool = false,
        Unused: u20 = 0,
        pub fn format(self: DISPFlags, w: *Writer) Writer.Error!void {
            var need_pipe = false;
            inline for (@typeInfo(DISPFlags).@"struct".fields) |field| {
                switch (@typeInfo(field.type)) {
                    .bool => if (@field(self, field.name)) {
                        if (need_pipe) try w.writeAll(" | ") else need_pipe = true;
                        try w.print("DISPFlag{s}", .{field.name});
                    },
                    .@"enum" => if (@field(self, field.name) != .Zero) {
                        if (need_pipe) try w.writeAll(" | ") else need_pipe = true;
                        try w.print("DISPFlag{s}", .{@tagName(@field(self, field.name))});
                    },
                    .int => assert(@field(self, field.name) == 0),
                    else => @compileError("bad field type: " ++ field.name ++ ": " ++
                        @typeName(field.type)),
                }
            }
            if (!need_pipe) try w.writeByte('0');
        }
    };
    file: Metadata,
    name: MetadataString,
    linkage_name: MetadataString,
    line: u32,
    scope_line: u32,
    ty: Metadata,
    di_flags: DIFlags,
    compile_unit: Metadata,
}