authorgravatar for david@vortan.devDavid Rubin <david@vortan.dev> 2026-10-03 18:59:40-05:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-10-09 10:15:11+02:00
logf8420f9a1b451c0079f971c8036f0c4304826294
treef37f96c378ca6151b669d6daba63df62819bae4f
parent09eb81de8b000a760680f42c07ef50cd30f97d08

Zir: print tag braced decls with correct parent decl node


1 files changed, 24 insertions(+), 12 deletions(-)

src/print_zir.zig+24-12
......@@ -1462,7 +1462,7 @@ const Writer = struct {
14621462 if (struct_decl.backing_int_type_body) |backing_int_type_body| {
14631463 assert(struct_decl.layout == .@"packed");
14641464 try stream.writeAll("packed(");
1465 try self.writeBracedDecl(stream, backing_int_type_body);
1465 try self.writeBracedDeclWithBaseline(stream, backing_int_type_body, struct_decl.arg_baseline_src_node);
14661466 try stream.writeAll("), ");
14671467 } else {
14681468 try stream.print("{s}, ", .{@tagName(struct_decl.layout)});
......@@ -1487,15 +1487,15 @@ const Writer = struct {
14871487 try stream.print("{f}: ", .{std.zig.fmtIdP(field_name)});
14881488
14891489 self.indent += 2;
1490 try self.writeBracedDecl(stream, field.type_body);
1490 try self.writeBracedDeclWithBaseline(stream, field.type_body, struct_decl.fields_baseline_src_node);
14911491 if (field.align_body) |body| {
14921492 try stream.writeAll(" align(");
1493 try self.writeBracedDecl(stream, body);
1493 try self.writeBracedDeclWithBaseline(stream, body, struct_decl.fields_baseline_src_node);
14941494 try stream.writeByte(')');
14951495 }
14961496 if (field.default_body) |body| {
14971497 try stream.writeAll(" = ");
1498 try self.writeBracedDecl(stream, body);
1498 try self.writeBracedDeclWithBaseline(stream, body, struct_decl.fields_baseline_src_node);
14991499 }
15001500 self.indent -= 2;
15011501
......@@ -1529,18 +1529,18 @@ const Writer = struct {
15291529 .@"packed" => try stream.writeAll("packed, "),
15301530 .packed_explicit => {
15311531 try stream.writeAll("packed(");
1532 try self.writeBracedDecl(stream, union_decl.arg_type_body.?);
1532 try self.writeBracedDeclWithBaseline(stream, union_decl.arg_type_body.?, union_decl.arg_baseline_src_node);
15331533 try stream.writeAll("), ");
15341534 },
15351535 .tagged_explicit => {
15361536 try stream.writeAll("tagged(");
1537 try self.writeBracedDecl(stream, union_decl.arg_type_body.?);
1537 try self.writeBracedDeclWithBaseline(stream, union_decl.arg_type_body.?, union_decl.arg_baseline_src_node);
15381538 try stream.writeAll("), ");
15391539 },
15401540 .tagged_enum => try stream.writeAll("tagged(enum), "),
15411541 .tagged_enum_explicit => {
15421542 try stream.writeAll("tagged(enum(");
1543 try self.writeBracedDecl(stream, union_decl.arg_type_body.?);
1543 try self.writeBracedDeclWithBaseline(stream, union_decl.arg_type_body.?, union_decl.arg_baseline_src_node);
15441544 try stream.writeAll(")), ");
15451545 },
15461546 }
......@@ -1565,16 +1565,16 @@ const Writer = struct {
15651565 self.indent += 2;
15661566 if (field.type_body) |body| {
15671567 try stream.writeAll(": ");
1568 try self.writeBracedDecl(stream, body);
1568 try self.writeBracedDeclWithBaseline(stream, body, union_decl.fields_baseline_src_node);
15691569 }
15701570 if (field.align_body) |body| {
15711571 try stream.writeAll(" align(");
1572 try self.writeBracedDecl(stream, body);
1572 try self.writeBracedDeclWithBaseline(stream, body, union_decl.fields_baseline_src_node);
15731573 try stream.writeByte(')');
15741574 }
15751575 if (field.value_body) |body| {
15761576 try stream.writeAll(" = ");
1577 try self.writeBracedDecl(stream, body);
1577 try self.writeBracedDeclWithBaseline(stream, body, union_decl.fields_baseline_src_node);
15781578 }
15791579 self.indent -= 2;
15801580
......@@ -1603,7 +1603,7 @@ const Writer = struct {
16031603 try self.writeFlag(stream, "nonexhaustive, ", enum_decl.nonexhaustive);
16041604 if (enum_decl.tag_type_body) |tag_type_body| {
16051605 try stream.writeAll("tag(");
1606 try self.writeBracedDecl(stream, tag_type_body);
1606 try self.writeBracedDeclWithBaseline(stream, tag_type_body, enum_decl.arg_baseline_src_node);
16071607 try stream.writeAll("), ");
16081608 }
16091609
......@@ -1625,7 +1625,7 @@ const Writer = struct {
16251625 try stream.print("{f}", .{std.zig.fmtIdP(field_name)});
16261626 if (field.value_body) |body| {
16271627 try stream.writeAll(" = ");
1628 try self.writeBracedDecl(stream, body);
1628 try self.writeBracedDeclWithBaseline(stream, body, enum_decl.fields_baseline_src_node);
16291629 }
16301630 try stream.writeAll(",\n");
16311631 }
......@@ -2409,6 +2409,18 @@ const Writer = struct {
24092409 try self.writeBracedBodyConditional(stream, body, self.recurse_decls);
24102410 }
24112411
2412 fn writeBracedDeclWithBaseline(
2413 self: *Writer,
2414 stream: *std.Io.Writer,
2415 body: []const Zir.Inst.Index,
2416 src_baseline: Ast.Node.Index,
2417 ) !void {
2418 const prev_parent_decl_node = self.parent_decl_node;
2419 self.parent_decl_node = src_baseline;
2420 defer self.parent_decl_node = prev_parent_decl_node;
2421 try self.writeBracedDecl(stream, body);
2422 }
2423
24122424 fn writeBracedBody(self: *Writer, stream: *std.Io.Writer, body: []const Zir.Inst.Index) !void {
24132425 try self.writeBracedBodyConditional(stream, body, self.recurse_blocks);
24142426 }