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 {...@@ -1462,7 +1462,7 @@ const Writer = struct {
1462 if (struct_decl.backing_int_type_body) |backing_int_type_body| {1462 if (struct_decl.backing_int_type_body) |backing_int_type_body| {
1463 assert(struct_decl.layout == .@"packed");1463 assert(struct_decl.layout == .@"packed");
1464 try stream.writeAll("packed(");1464 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);
1466 try stream.writeAll("), ");1466 try stream.writeAll("), ");
1467 } else {1467 } else {
1468 try stream.print("{s}, ", .{@tagName(struct_decl.layout)});1468 try stream.print("{s}, ", .{@tagName(struct_decl.layout)});
...@@ -1487,15 +1487,15 @@ const Writer = struct {...@@ -1487,15 +1487,15 @@ const Writer = struct {
1487 try stream.print("{f}: ", .{std.zig.fmtIdP(field_name)});1487 try stream.print("{f}: ", .{std.zig.fmtIdP(field_name)});
14881488
1489 self.indent += 2;1489 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);
1491 if (field.align_body) |body| {1491 if (field.align_body) |body| {
1492 try stream.writeAll(" align(");1492 try stream.writeAll(" align(");
1493 try self.writeBracedDecl(stream, body);1493 try self.writeBracedDeclWithBaseline(stream, body, struct_decl.fields_baseline_src_node);
1494 try stream.writeByte(')');1494 try stream.writeByte(')');
1495 }1495 }
1496 if (field.default_body) |body| {1496 if (field.default_body) |body| {
1497 try stream.writeAll(" = ");1497 try stream.writeAll(" = ");
1498 try self.writeBracedDecl(stream, body);1498 try self.writeBracedDeclWithBaseline(stream, body, struct_decl.fields_baseline_src_node);
1499 }1499 }
1500 self.indent -= 2;1500 self.indent -= 2;
15011501
...@@ -1529,18 +1529,18 @@ const Writer = struct {...@@ -1529,18 +1529,18 @@ const Writer = struct {
1529 .@"packed" => try stream.writeAll("packed, "),1529 .@"packed" => try stream.writeAll("packed, "),
1530 .packed_explicit => {1530 .packed_explicit => {
1531 try stream.writeAll("packed(");1531 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);
1533 try stream.writeAll("), ");1533 try stream.writeAll("), ");
1534 },1534 },
1535 .tagged_explicit => {1535 .tagged_explicit => {
1536 try stream.writeAll("tagged(");1536 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);
1538 try stream.writeAll("), ");1538 try stream.writeAll("), ");
1539 },1539 },
1540 .tagged_enum => try stream.writeAll("tagged(enum), "),1540 .tagged_enum => try stream.writeAll("tagged(enum), "),
1541 .tagged_enum_explicit => {1541 .tagged_enum_explicit => {
1542 try stream.writeAll("tagged(enum(");1542 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);
1544 try stream.writeAll(")), ");1544 try stream.writeAll(")), ");
1545 },1545 },
1546 }1546 }
...@@ -1565,16 +1565,16 @@ const Writer = struct {...@@ -1565,16 +1565,16 @@ const Writer = struct {
1565 self.indent += 2;1565 self.indent += 2;
1566 if (field.type_body) |body| {1566 if (field.type_body) |body| {
1567 try stream.writeAll(": ");1567 try stream.writeAll(": ");
1568 try self.writeBracedDecl(stream, body);1568 try self.writeBracedDeclWithBaseline(stream, body, union_decl.fields_baseline_src_node);
1569 }1569 }
1570 if (field.align_body) |body| {1570 if (field.align_body) |body| {
1571 try stream.writeAll(" align(");1571 try stream.writeAll(" align(");
1572 try self.writeBracedDecl(stream, body);1572 try self.writeBracedDeclWithBaseline(stream, body, union_decl.fields_baseline_src_node);
1573 try stream.writeByte(')');1573 try stream.writeByte(')');
1574 }1574 }
1575 if (field.value_body) |body| {1575 if (field.value_body) |body| {
1576 try stream.writeAll(" = ");1576 try stream.writeAll(" = ");
1577 try self.writeBracedDecl(stream, body);1577 try self.writeBracedDeclWithBaseline(stream, body, union_decl.fields_baseline_src_node);
1578 }1578 }
1579 self.indent -= 2;1579 self.indent -= 2;
15801580
...@@ -1603,7 +1603,7 @@ const Writer = struct {...@@ -1603,7 +1603,7 @@ const Writer = struct {
1603 try self.writeFlag(stream, "nonexhaustive, ", enum_decl.nonexhaustive);1603 try self.writeFlag(stream, "nonexhaustive, ", enum_decl.nonexhaustive);
1604 if (enum_decl.tag_type_body) |tag_type_body| {1604 if (enum_decl.tag_type_body) |tag_type_body| {
1605 try stream.writeAll("tag(");1605 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);
1607 try stream.writeAll("), ");1607 try stream.writeAll("), ");
1608 }1608 }
16091609
...@@ -1625,7 +1625,7 @@ const Writer = struct {...@@ -1625,7 +1625,7 @@ const Writer = struct {
1625 try stream.print("{f}", .{std.zig.fmtIdP(field_name)});1625 try stream.print("{f}", .{std.zig.fmtIdP(field_name)});
1626 if (field.value_body) |body| {1626 if (field.value_body) |body| {
1627 try stream.writeAll(" = ");1627 try stream.writeAll(" = ");
1628 try self.writeBracedDecl(stream, body);1628 try self.writeBracedDeclWithBaseline(stream, body, enum_decl.fields_baseline_src_node);
1629 }1629 }
1630 try stream.writeAll(",\n");1630 try stream.writeAll(",\n");
1631 }1631 }
...@@ -2409,6 +2409,18 @@ const Writer = struct {...@@ -2409,6 +2409,18 @@ const Writer = struct {
2409 try self.writeBracedBodyConditional(stream, body, self.recurse_decls);2409 try self.writeBracedBodyConditional(stream, body, self.recurse_decls);
2410 }2410 }
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
2412 fn writeBracedBody(self: *Writer, stream: *std.Io.Writer, body: []const Zir.Inst.Index) !void {2424 fn writeBracedBody(self: *Writer, stream: *std.Io.Writer, body: []const Zir.Inst.Index) !void {
2413 try self.writeBracedBodyConditional(stream, body, self.recurse_blocks);2425 try self.writeBracedBodyConditional(stream, body, self.recurse_blocks);
2414 }2426 }