aboutsummaryrefslogtreecommitdiff
path: root/src/interpreter.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/interpreter.zig')
-rw-r--r--src/interpreter.zig36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/interpreter.zig b/src/interpreter.zig
new file mode 100644
index 0000000..5702336
--- /dev/null
+++ b/src/interpreter.zig
@@ -0,0 +1,36 @@
+const std = @import("std");
+const field = @import("field.zig");
+const pointer = @import("pointer.zig");
+
+pub const Interpreter = struct {
+ allocator: std.mem.Allocator,
+ field: *field.Field,
+ pointer: *pointer.Pointer,
+
+ pub fn deinit(self: *Interpreter) void {
+ self.allocator.destroy(self);
+ }
+ pub fn init(allocator: std.mem.Allocator, f: *field.Field, p: *pointer.Pointer) !*Interpreter {
+ var i = try allocator.create(Interpreter);
+ errdefer allocator.destroy(i);
+ i.allocator = allocator;
+ i.field = f;
+ i.pointer = p;
+ return i;
+ }
+ pub fn run(self: *Interpreter) !i64 {
+ while (true) {
+ if (try self.pointer.exec()) |ret| {
+ if (ret.code) |code| {
+ return code;
+ } else {
+ return 0;
+ }
+ }
+ }
+ }
+};
+
+test "all" {
+ std.testing.refAllDecls(@This());
+}