diff --git a/src/main.zig b/src/main.zig index f75c1ef..63d2089 100644 --- a/src/main.zig +++ b/src/main.zig @@ -17,6 +17,7 @@ const std = @import("std"); const langs = @import("lang.zig"); +const runners = @import("runner.zig"); const c = @cImport({ @cInclude("assert.h"); @@ -304,6 +305,7 @@ pub fn main() !void { const allocator = &arena.allocator; var lang = langs.Lang.init(allocator); + var runner = runners.Runner.init(allocator); //defer lang.deinit(); var args_it = std.process.args(); @@ -324,6 +326,7 @@ pub fn main() !void { _ = try file.read(data); var cmds = try lang.parse(data); + try runner.runCommands(cmds); var it = cmds.iterator(); while (it.next()) |cmd| { cmd.print(); diff --git a/src/runner.zig b/src/runner.zig new file mode 100644 index 0000000..0b81ba7 --- /dev/null +++ b/src/runner.zig @@ -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); + } + } +};