structstd.zig.Zir.Inst.Declaration.Flags[src]

Fields

src_line: u30
src_column: u29
id: Id

Source Code

Source code
pub const Flags = packed struct(u64) {
    src_line: u30,
    src_column: u29,
    id: Id,

    pub const Id = enum(u5) {
        unnamed_test,
        @"test",
        decltest,
        @"comptime",

        @"usingnamespace",
        pub_usingnamespace,

        const_simple,
        const_typed,
        @"const",
        pub_const_simple,
        pub_const_typed,
        pub_const,

        extern_const_simple,
        extern_const,
        pub_extern_const_simple,
        pub_extern_const,

        export_const,
        pub_export_const,

        var_simple,
        @"var",
        var_threadlocal,
        pub_var_simple,
        pub_var,
        pub_var_threadlocal,

        extern_var,
        extern_var_threadlocal,
        pub_extern_var,
        pub_extern_var_threadlocal,

        export_var,
        export_var_threadlocal,
        pub_export_var,
        pub_export_var_threadlocal,

        pub fn hasName(id: Id) bool {
            return switch (id) {
                .unnamed_test,
                .@"comptime",
                .@"usingnamespace",
                .pub_usingnamespace,
                => false,
                else => true,
            };
        }

        pub fn hasLibName(id: Id) bool {
            return switch (id) {
                .extern_const,
                .pub_extern_const,
                .extern_var,
                .extern_var_threadlocal,
                .pub_extern_var,
                .pub_extern_var_threadlocal,
                => true,
                else => false,
            };
        }

        pub fn hasTypeBody(id: Id) bool {
            return switch (id) {
                .unnamed_test,
                .@"test",
                .decltest,
                .@"comptime",
                .@"usingnamespace",
                .pub_usingnamespace,
                => false, // these constructs are untyped
                .const_simple,
                .pub_const_simple,
                .var_simple,
                .pub_var_simple,
                => false, // these reprs omit type bodies
                else => true,
            };
        }

        pub fn hasValueBody(id: Id) bool {
            return switch (id) {
                .extern_const_simple,
                .extern_const,
                .pub_extern_const_simple,
                .pub_extern_const,
                .extern_var,
                .extern_var_threadlocal,
                .pub_extern_var,
                .pub_extern_var_threadlocal,
                => false, // externs do not have values
                else => true,
            };
        }

        pub fn hasSpecialBodies(id: Id) bool {
            return switch (id) {
                .unnamed_test,
                .@"test",
                .decltest,
                .@"comptime",
                .@"usingnamespace",
                .pub_usingnamespace,
                => false, // these constructs are untyped
                .const_simple,
                .const_typed,
                .pub_const_simple,
                .pub_const_typed,
                .extern_const_simple,
                .pub_extern_const_simple,
                .var_simple,
                .pub_var_simple,
                => false, // these reprs omit special bodies
                else => true,
            };
        }

        pub fn linkage(id: Id) Declaration.Unwrapped.Linkage {
            return switch (id) {
                .extern_const_simple,
                .extern_const,
                .pub_extern_const_simple,
                .pub_extern_const,
                .extern_var,
                .extern_var_threadlocal,
                .pub_extern_var,
                .pub_extern_var_threadlocal,
                => .@"extern",
                .export_const,
                .pub_export_const,
                .export_var,
                .export_var_threadlocal,
                .pub_export_var,
                .pub_export_var_threadlocal,
                => .@"export",
                else => .normal,
            };
        }

        pub fn kind(id: Id) Declaration.Unwrapped.Kind {
            return switch (id) {
                .unnamed_test => .unnamed_test,
                .@"test" => .@"test",
                .decltest => .decltest,
                .@"comptime" => .@"comptime",
                .@"usingnamespace", .pub_usingnamespace => .@"usingnamespace",
                .const_simple,
                .const_typed,
                .@"const",
                .pub_const_simple,
                .pub_const_typed,
                .pub_const,
                .extern_const_simple,
                .extern_const,
                .pub_extern_const_simple,
                .pub_extern_const,
                .export_const,
                .pub_export_const,
                => .@"const",
                .var_simple,
                .@"var",
                .var_threadlocal,
                .pub_var_simple,
                .pub_var,
                .pub_var_threadlocal,
                .extern_var,
                .extern_var_threadlocal,
                .pub_extern_var,
                .pub_extern_var_threadlocal,
                .export_var,
                .export_var_threadlocal,
                .pub_export_var,
                .pub_export_var_threadlocal,
                => .@"var",
            };
        }

        pub fn isPub(id: Id) bool {
            return switch (id) {
                .pub_usingnamespace,
                .pub_const_simple,
                .pub_const_typed,
                .pub_const,
                .pub_extern_const_simple,
                .pub_extern_const,
                .pub_export_const,
                .pub_var_simple,
                .pub_var,
                .pub_var_threadlocal,
                .pub_extern_var,
                .pub_extern_var_threadlocal,
                .pub_export_var,
                .pub_export_var_threadlocal,
                => true,
                else => false,
            };
        }

        pub fn isThreadlocal(id: Id) bool {
            return switch (id) {
                .var_threadlocal,
                .pub_var_threadlocal,
                .extern_var_threadlocal,
                .pub_extern_var_threadlocal,
                .export_var_threadlocal,
                .pub_export_var_threadlocal,
                => true,
                else => false,
            };
        }
    };
}