Commit 2984a75804

Krzysztof Wolicki <der.teufel.mail@gmail.com>
2023-06-27 21:40:08
autodoc: Try to handle all InternPool.Index types good enough
1 parent 4dacaa1
Changed files (1)
src/Autodoc.zig
@@ -121,21 +121,6 @@ pub fn generateZirData(self: *Autodoc) !void {
             try self.types.append(
                 self.arena,
                 switch (ip_index) {
-                    else => blk: {
-                        // TODO: map the remaining refs to a correct type
-                        //       instead of just assinging "array" to them.
-                        break :blk .{
-                            .Array = .{
-                                .len = .{
-                                    .int = .{
-                                        .value = 1,
-                                        .negated = false,
-                                    },
-                                },
-                                .child = .{ .type = 0 },
-                            },
-                        };
-                    },
                     .u0_type,
                     .i0_type,
                     .u1_type,
@@ -153,6 +138,7 @@ pub fn generateZirData(self: *Autodoc) !void {
                     .i128_type,
                     .usize_type,
                     .isize_type,
+                    .c_char_type,
                     .c_short_type,
                     .c_ushort_type,
                     .c_int_type,
@@ -183,10 +169,10 @@ pub fn generateZirData(self: *Autodoc) !void {
                     .anyopaque_type => .{
                         .ComptimeExpr = .{ .name = try tmpbuf.toOwnedSlice() },
                     },
+
                     .bool_type => .{
                         .Bool = .{ .name = try tmpbuf.toOwnedSlice() },
                     },
-
                     .noreturn_type => .{
                         .NoReturn = .{ .name = try tmpbuf.toOwnedSlice() },
                     },
@@ -203,10 +189,103 @@ pub fn generateZirData(self: *Autodoc) !void {
                         .ErrorSet = .{ .name = try tmpbuf.toOwnedSlice() },
                     },
                     // should be an Enum but if we don't analyze std we don't get the ast node
-                    // since it's std.builtin.CallingConvention
-                    .calling_convention_type => .{
+                    // since it's defined in std.builtin
+                    .calling_convention_type,
+                    .atomic_order_type,
+                    .atomic_rmw_op_type,
+                    .address_space_type,
+                    .float_mode_type,
+                    .reduce_op_type,
+                    .call_modifier_type,
+                    .prefetch_options_type,
+                    .export_options_type,
+                    .extern_options_type,
+                    => .{
+                        .Type = .{ .name = try tmpbuf.toOwnedSlice() },
+                    },
+                    .manyptr_u8_type => .{
+                        .Pointer = .{
+                            .size = .Many,
+                            .child = .{ .type = @intFromEnum(InternPool.Index.u8_type) },
+                            .is_mutable = true,
+                        },
+                    },
+                    .manyptr_const_u8_type => .{
+                        .Pointer = .{
+                            .size = .Many,
+                            .child = .{ .type = @intFromEnum(InternPool.Index.u8_type) },
+                        },
+                    },
+                    .manyptr_const_u8_sentinel_0_type => .{
+                        .Pointer = .{
+                            .size = .Many,
+                            .child = .{ .type = @intFromEnum(InternPool.Index.u8_type) },
+                            .sentinel = .{ .int = .{ .value = 0 } },
+                        },
+                    },
+                    .single_const_pointer_to_comptime_int_type => .{
+                        .Pointer = .{
+                            .size = .One,
+                            .child = .{ .type = @intFromEnum(InternPool.Index.comptime_int_type) },
+                        },
+                    },
+                    .slice_const_u8_type => .{
+                        .Pointer = .{
+                            .size = .Slice,
+                            .child = .{ .type = @intFromEnum(InternPool.Index.u8_type) },
+                        },
+                    },
+                    .slice_const_u8_sentinel_0_type => .{
+                        .Pointer = .{
+                            .size = .Slice,
+                            .child = .{ .type = @intFromEnum(InternPool.Index.u8_type) },
+                            .sentinel = .{ .int = .{ .value = 0 } },
+                        },
+                    },
+                    // Not fully correct
+                    // since it actually has no src or line_number
+                    .empty_struct_type => .{
+                        .Struct = .{
+                            .name = "",
+                            .src = 0,
+                            .is_tuple = false,
+                            .line_number = 0,
+                            .parent_container = null,
+                            .layout = null,
+                        },
+                    },
+                    .anyerror_void_error_union_type => .{
+                        .ErrorUnion = .{
+                            .lhs = .{ .type = @intFromEnum(InternPool.Index.anyerror_type) },
+                            .rhs = .{ .type = @intFromEnum(InternPool.Index.void_type) },
+                        },
+                    },
+                    .anyframe_type => .{
+                        .AnyFrame = .{ .name = try tmpbuf.toOwnedSlice() },
+                    },
+                    .enum_literal_type => .{
+                        .EnumLiteral = .{ .name = try tmpbuf.toOwnedSlice() },
+                    },
+                    .undefined_type => .{
+                        .Undefined = .{ .name = try tmpbuf.toOwnedSlice() },
+                    },
+                    .null_type => .{
+                        .Null = .{ .name = try tmpbuf.toOwnedSlice() },
+                    },
+                    .optional_noreturn_type => .{
+                        .Optional = .{
+                            .name = try tmpbuf.toOwnedSlice(),
+                            .child = .{ .type = @intFromEnum(InternPool.Index.noreturn_type) },
+                        },
+                    },
+                    // Poison and special tag
+                    .generic_poison_type,
+                    .var_args_param_type,
+                    => .{
                         .Type = .{ .name = try tmpbuf.toOwnedSlice() },
                     },
+                    // We want to catch new types added to InternPool.Index
+                    else => unreachable,
                 },
             );
         }