aboutsummaryrefslogtreecommitdiff
path: root/src/main.zig
blob: d9aee7764ba93bc0dc2a81411808536641f0c2cd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
const std = @import("std");
pub const Grammar = @import("grammar.zig");
pub const gss = @import("gss.zig");
pub const recognizer = @import("recognizer.zig");
pub const argument = @import("argument.zig");
pub const command = @import("command/root.zig");
pub const Generator = @import("generator.zig").Generator;
pub const Scheduler = @import("scheduler.zig").Scheduler;

const Args = argument.Args;
const BenchmarkArgs = argument.BenchmarkArgs;
const GenerateArgs = argument.GenerateArgs;


pub fn main() !void {
	var gpa = std.heap.GeneralPurposeAllocator(.{}){};
	const allocator = gpa.allocator();
	defer {
		if (gpa.deinit() == .leak) {
			@panic("memory leak detected");
		}
	}

	var arguments = Args.parse(allocator);
	defer arguments.deinit();

	try switch(arguments) {
		.benchmark => |*args| command.benchmark(args, allocator),
		.generate => |*args| command.generate(args, allocator),
	};
}

test {
	std.testing.refAllDecls(@This());
}