| ... | @@ -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; |
| 954 | | 991 | |
| 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 | ); |
| 962 | | 999 | |
| 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) }, |