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 {...@@ -412,6 +412,10 @@ const DocData = struct {
412 size: std.builtin.TypeInfo.Pointer.Size,412 size: std.builtin.TypeInfo.Pointer.Size,
413 child: Expr,413 child: Expr,
414 sentinel: ?Expr = null,414 sentinel: ?Expr = null,
415 @"align": ?Expr = null,
416 address_space: ?Expr = null,
417 bit_start: ?Expr = null,
418 host_size: ?Expr = null,
415 is_allowzero: bool = false,419 is_allowzero: bool = false,
416 is_mutable: bool = false,420 is_mutable: bool = false,
417 is_volatile: bool = false,421 is_volatile: bool = false,
...@@ -537,6 +541,38 @@ const DocData = struct {...@@ -537,6 +541,38 @@ const DocData = struct {
537 try sentinel.jsonStringify(options, w);541 try sentinel.jsonStringify(options, w);
538 try w.print(",", .{});542 try w.print(",", .{});
539 }543 }
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 }
540 if (options.whitespace) |ws| try ws.outputIndent(w);576 if (options.whitespace) |ws| try ws.outputIndent(w);
541 try w.print(577 try w.print(
542 \\"is_allowzero": {},578 \\"is_allowzero": {},
...@@ -951,6 +987,7 @@ fn walkInstruction(...@@ -951,6 +987,7 @@ fn walkInstruction(
951 .ptr_type => {987 .ptr_type => {
952 const ptr = data[inst_index].ptr_type;988 const ptr = data[inst_index].ptr_type;
953 const extra = file.zir.extraData(Zir.Inst.PtrType, ptr.payload_index);989 const extra = file.zir.extraData(Zir.Inst.PtrType, ptr.payload_index);
990 var extra_index = extra.end;
954991
955 const type_slot_index = self.types.items.len;992 const type_slot_index = self.types.items.len;
956 const elem_type_ref = try self.walkRef(993 const elem_type_ref = try self.walkRef(
...@@ -960,9 +997,61 @@ fn walkInstruction(...@@ -960,9 +997,61 @@ fn walkInstruction(
960 false,997 false,
961 );998 );
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
964 try self.types.append(self.arena, .{1039 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 },
966 });1055 });
967 return DocData.WalkResult{1056 return DocData.WalkResult{
968 .typeRef = .{ .type = @enumToInt(Ref.type_type) },1057 .typeRef = .{ .type = @enumToInt(Ref.type_type) },