add basic runner

This commit is contained in:
Luna 2019-07-08 12:38:16 -03:00
parent eeed063d0d
commit 41a8b18d66
2 changed files with 33 additions and 0 deletions

View file

@ -17,6 +17,7 @@
const std = @import("std"); const std = @import("std");
const langs = @import("lang.zig"); const langs = @import("lang.zig");
const runners = @import("runner.zig");
const c = @cImport({ const c = @cImport({
@cInclude("assert.h"); @cInclude("assert.h");
@ -304,6 +305,7 @@ pub fn main() !void {
const allocator = &arena.allocator; const allocator = &arena.allocator;
var lang = langs.Lang.init(allocator); var lang = langs.Lang.init(allocator);
var runner = runners.Runner.init(allocator);
//defer lang.deinit(); //defer lang.deinit();
var args_it = std.process.args(); var args_it = std.process.args();
@ -324,6 +326,7 @@ pub fn main() !void {
_ = try file.read(data); _ = try file.read(data);
var cmds = try lang.parse(data); var cmds = try lang.parse(data);
try runner.runCommands(cmds);
var it = cmds.iterator(); var it = cmds.iterator();
while (it.next()) |cmd| { while (it.next()) |cmd| {
cmd.print(); cmd.print();

30
src/runner.zig Normal file
View file

@ -0,0 +1,30 @@
const std = @import("std");
const lang = @import("lang.zig");
pub const RunError = error{UnknownCommand};
pub const Runner = struct {
allocator: *std.mem.Allocator,
pub fn init(allocator: *std.mem.Allocator) Runner {
return Runner{ .allocator = allocator };
}
fn runCommand(self: *Runner, cmd: *lang.Command) !void {
return switch (cmd.command) {
.Noop => {},
else => blk: {
std.debug.warn("Unknown command: {}\n", cmd.command);
break :blk RunError.UnknownCommand;
},
};
}
pub fn runCommands(self: *Runner, cmds: lang.CommandList) !void {
var it = cmds.iterator();
while (it.next()) |cmd| {
try self.runCommand(cmd);
}
}
};