Skip to content

Commit 210ebbd

Browse files
committed
add a main function to src/print_ast.zig
1 parent ba244bf commit 210ebbd

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

src/print_ast.zig

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -855,6 +855,58 @@ fn nodeTagName(tag: Ast.Node.Tag) []const u8 {
855855
};
856856
}
857857

858+
var debug_allocator: std.heap.DebugAllocator(.{}) = .init;
859+
860+
pub fn main() !u8 {
861+
const gpa, const is_debug = gpa: {
862+
if (@import("builtin").target.os.tag == .wasi) break :gpa .{ std.heap.wasm_allocator, false };
863+
break :gpa switch (@import("builtin").mode) {
864+
.Debug, .ReleaseSafe => .{ debug_allocator.allocator(), true },
865+
.ReleaseFast, .ReleaseSmall => .{ std.heap.smp_allocator, false },
866+
};
867+
};
868+
defer if (is_debug) {
869+
_ = debug_allocator.deinit();
870+
};
871+
872+
var threaded: std.Io.Threaded = .init_single_threaded;
873+
const io = threaded.ioBasic();
874+
875+
var args = try std.process.argsAlloc(gpa);
876+
defer std.process.argsFree(gpa, args);
877+
878+
if (args.len != 2) {
879+
std.process.fatal("expected exactly 1 argument but got {d}", .{args.len - 1});
880+
}
881+
882+
const file_path = args[1];
883+
884+
const source = source: {
885+
const source_file = try std.Io.Dir.cwd().openFile(io, file_path, .{});
886+
defer source_file.close(io);
887+
var read_buffer: [4096]u8 = undefined;
888+
var file_reader = source_file.reader(io, &read_buffer);
889+
break :source try std.zig.readSourceFileToEndAlloc(gpa, &file_reader);
890+
};
891+
defer gpa.free(source);
892+
893+
const mode: Ast.Mode = if (std.mem.endsWith(u8, file_path, ".zon")) .zon else .zig;
894+
var tree: Ast = try .parse(gpa, source, mode);
895+
defer tree.deinit(gpa);
896+
897+
var buffer: [4096]u8 = undefined;
898+
var stdout_writer = std.fs.File.stdout().writer(&buffer);
899+
900+
renderToWriter(
901+
&tree,
902+
.{ .trailing_comments = .{ .filename = file_path } },
903+
&stdout_writer.interface,
904+
) catch return stdout_writer.err.?;
905+
stdout_writer.interface.flush() catch return stdout_writer.err.?;
906+
907+
return 0;
908+
}
909+
858910
test PrintAst {
859911
const source =
860912
\\const std = @import("std");

0 commit comments

Comments
 (0)