diff --git a/lib/std/zig/Ast.zig b/lib/std/zig/Ast.zig index b95391c119..48d18e2556 100644 --- a/lib/std/zig/Ast.zig +++ b/lib/std/zig/Ast.zig @@ -12,6 +12,7 @@ tokens: TokenList.Slice, /// references to the root node, this means 0 is available to indicate null. nodes: NodeList.Slice, extra_data: []Node.Index, +mode: Mode = .zig, errors: []const Error, @@ -96,6 +97,7 @@ pub fn parse(gpa: Allocator, source: [:0]const u8, mode: Mode) Allocator.Error!A // TODO experiment with compacting the MultiArrayList slices here return Ast{ .source = source, + .mode = mode, .tokens = tokens.toOwnedSlice(), .nodes = parser.nodes.toOwnedSlice(), .extra_data = try parser.extra_data.toOwnedSlice(gpa), diff --git a/lib/std/zig/render.zig b/lib/std/zig/render.zig index 6533c21f63..a7a03c1f8d 100644 --- a/lib/std/zig/render.zig +++ b/lib/std/zig/render.zig @@ -30,7 +30,17 @@ pub fn renderTree(buffer: *std.ArrayList(u8), tree: Ast) Error!void { try renderContainerDocComments(ais, tree, 0); } - try renderMembers(buffer.allocator, ais, tree, tree.rootDecls()); + if (tree.mode == .zon) { + try renderExpression( + buffer.allocator, + ais, + tree, + tree.nodes.items(.data)[0].lhs, + .newline, + ); + } else { + try renderMembers(buffer.allocator, ais, tree, tree.rootDecls()); + } if (ais.disabled_offset) |disabled_offset| { try writeFixingWhitespace(ais.underlying_writer, tree.source[disabled_offset..]); diff --git a/src/translate_c/ast.zig b/src/translate_c/ast.zig index 8d4d6f833a..0381f58cf9 100644 --- a/src/translate_c/ast.zig +++ b/src/translate_c/ast.zig @@ -794,6 +794,7 @@ pub fn render(gpa: Allocator, nodes: []const Node) !std.zig.Ast { .nodes = ctx.nodes.toOwnedSlice(), .extra_data = try ctx.extra_data.toOwnedSlice(gpa), .errors = &.{}, + .mode = .zig, }; }