summaryrefslogtreecommitdiff
path: root/src/Interpreter.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/Interpreter.zig')
-rw-r--r--src/Interpreter.zig39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/Interpreter.zig b/src/Interpreter.zig
new file mode 100644
index 0000000..6862706
--- /dev/null
+++ b/src/Interpreter.zig
@@ -0,0 +1,39 @@
+const c = @import("c");
+
+const zpy = @import("root.zig");
+
+const Self = @This();
+
+globals: zpy.Dict,
+
+pub fn init() !Self {
+ c.Py_Initialize();
+
+ const self: Self = .{
+ .globals = try .new(),
+ };
+
+ return self;
+}
+
+pub const RunOptions = struct {
+ locals: ?*zpy.Dict = null,
+};
+
+pub fn run(self: *Self, str: [*c]const u8, options: RunOptions) zpy.Error!zpy.Object {
+ if (c.PyRun_String(
+ str,
+ c.Py_file_input,
+ self.globals.object.ptr,
+ if (options.locals) |loc| loc.object.ptr else null,
+ )) |object| {
+ return .fromPtr(object);
+ }
+
+ return error.Exception;
+}
+
+pub fn deinit(self: *Self) void {
+ c.Py_Finalize();
+ self.* = undefined;
+}