authorgravatar for vallahor91@gmail.comVallahor <vallahor91@gmail.com> 2022-05-28 20:33:46-03:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-07-19 19:10:11-07:00
logb96bd33f5558225f249ecee86156a2b7dd029064
tree73d0b9f1c32c35aee0c6ffc94a7c85710994dee9
parentb823f011412fdb3e168c5c093bbb5c47983e74bf

add: handling to extra information in ptr_type


1 files changed, 91 insertions(+), 2 deletions(-)

src/Autodoc.zig+91-2
......@@ -412,6 +412,10 @@ const DocData = struct {
412412 size: std.builtin.TypeInfo.Pointer.Size,
413413 child: Expr,
414414 sentinel: ?Expr = null,
415 @"align": ?Expr = null,
416 address_space: ?Expr = null,
417 bit_start: ?Expr = null,
418 host_size: ?Expr = null,
415419 is_allowzero: bool = false,
416420 is_mutable: bool = false,
417421 is_volatile: bool = false,
......@@ -537,6 +541,38 @@ const DocData = struct {
537541 try sentinel.jsonStringify(options, w);
538542 try w.print(",", .{});
539543 }
544 if (v.@"align") |@"align"| {
545 try w.print(
546 \\"align":
547 , .{});
548 if (options.whitespace) |*ws| ws.indent_level += 1;
549 try @"align".jsonStringify(options, w);
550 try w.print(",", .{});
551 }
552 if (v.address_space) |address_space| {
553 try w.print(
554 \\"address_space":
555 , .{});
556 if (options.whitespace) |*ws| ws.indent_level += 1;
557 try address_space.jsonStringify(options, w);
558 try w.print(",", .{});
559 }
560 if (v.bit_start) |bit_start| {
561 try w.print(
562 \\"bit_start":
563 , .{});
564 if (options.whitespace) |*ws| ws.indent_level += 1;
565 try bit_start.jsonStringify(options, w);
566 try w.print(",", .{});
567 }
568 if (v.host_size) |host_size| {
569 try w.print(
570 \\"host_size":
571 , .{});
572 if (options.whitespace) |*ws| ws.indent_level += 1;
573 try host_size.jsonStringify(options, w);
574 try w.print(",", .{});
575 }
540576 if (options.whitespace) |ws| try ws.outputIndent(w);
541577 try w.print(
542578 \\"is_allowzero": {},
......@@ -951,6 +987,7 @@ fn walkInstruction(
951987 .ptr_type => {
952988 const ptr = data[inst_index].ptr_type;
953989 const extra = file.zir.extraData(Zir.Inst.PtrType, ptr.payload_index);
990 var extra_index = extra.end;
954991
955992 const type_slot_index = self.types.items.len;
956993 const elem_type_ref = try self.walkRef(
......@@ -960,9 +997,61 @@ fn walkInstruction(
960997 false,
961998 );
962999
963 const sentinel: ?DocData.Expr = if (ptr.flags.has_sentinel) DocData.Expr{ .int = .{ .value = 0, .negated = false } } else null;
1000 // @check if `addrspace`, `bit_start` and `host_size` really need to be
1001 // present in json
1002 var sentinel: ?DocData.Expr = null;
1003 if (ptr.flags.has_sentinel) {
1004 const ref = @intToEnum(Zir.Inst.Ref, file.zir.extra[extra_index]);
1005 const ref_result = try self.walkRef(file, parent_scope, ref, false);
1006 sentinel = ref_result.expr;
1007 extra_index += 1;
1008 }
1009
1010 var @"align": ?DocData.Expr = null;
1011 if (ptr.flags.has_align) {
1012 const ref = @intToEnum(Zir.Inst.Ref, file.zir.extra[extra_index]);
1013 const ref_result = try self.walkRef(file, parent_scope, ref, false);
1014 @"align" = ref_result.expr;
1015 extra_index += 1;
1016 }
1017 var address_space: ?DocData.Expr = null;
1018 if (ptr.flags.has_addrspace) {
1019 const ref = @intToEnum(Zir.Inst.Ref, file.zir.extra[extra_index]);
1020 const ref_result = try self.walkRef(file, parent_scope, ref, false);
1021 address_space = ref_result.expr;
1022 extra_index += 1;
1023 }
1024 var bit_start: ?DocData.Expr = null;
1025 if (ptr.flags.has_bit_range) {
1026 const ref = @intToEnum(Zir.Inst.Ref, file.zir.extra[extra_index]);
1027 const ref_result = try self.walkRef(file, parent_scope, ref, false);
1028 address_space = ref_result.expr;
1029 extra_index += 1;
1030 }
1031
1032 var host_size: ?DocData.Expr = null;
1033 if (ptr.flags.has_bit_range) {
1034 const ref = @intToEnum(Zir.Inst.Ref, file.zir.extra[extra_index]);
1035 const ref_result = try self.walkRef(file, parent_scope, ref, false);
1036 host_size = ref_result.expr;
1037 }
1038
9641039 try self.types.append(self.arena, .{
965 .Pointer = .{ .size = ptr.size, .child = elem_type_ref.expr, .sentinel = sentinel, .is_mutable = ptr.flags.is_mutable, .has_align = ptr.flags.has_align, .has_sentinel = ptr.flags.has_sentinel, .is_volatile = ptr.flags.is_volatile, .has_addrspace = ptr.flags.has_addrspace, .has_bit_range = ptr.flags.has_bit_range },
1040 .Pointer = .{
1041 .size = ptr.size,
1042 .child = elem_type_ref.expr,
1043 .has_align = ptr.flags.has_align,
1044 .@"align" = @"align",
1045 .has_addrspace = ptr.flags.has_addrspace,
1046 .address_space = address_space,
1047 .has_sentinel = ptr.flags.has_sentinel,
1048 .sentinel = sentinel,
1049 .is_mutable = ptr.flags.is_mutable,
1050 .is_volatile = ptr.flags.is_volatile,
1051 .has_bit_range = ptr.flags.has_bit_range,
1052 .bit_start = bit_start,
1053 .host_size = host_size,
1054 },
9661055 });
9671056 return DocData.WalkResult{
9681057 .typeRef = .{ .type = @enumToInt(Ref.type_type) },