From 9a0a594345d7d5cb0cdc33797f4032875f9c386d Mon Sep 17 00:00:00 2001 From: kayomn Date: Sun, 13 Aug 2023 01:27:13 +0100 Subject: [PATCH] Make Kym env options optional --- source/ona/file.zig | 5 +++++ source/ona/kym.zig | 22 +++++++++++++++------- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/source/ona/file.zig b/source/ona/file.zig index 1296aec..b05ae92 100644 --- a/source/ona/file.zig +++ b/source/ona/file.zig @@ -3,10 +3,13 @@ const coral = @import("coral"); const ext = @import("./ext.zig"); pub const Access = union (enum) { + null, sandboxed_path: *const Path, pub fn open_readable(self: Access, readable_path: Path) ?*Readable { switch (self) { + .null => return null, + .sandboxed_path => |sandboxed_path| { const readable_path_string = sandboxed_path.joined(readable_path).to_string() orelse return null; @@ -17,6 +20,8 @@ pub const Access = union (enum) { pub fn query(self: Access, path: Path) ?Info { switch (self) { + .null => return null, + .sandboxed_path => |sandboxed_path| { const path_string = sandboxed_path.joined(path).to_string() orelse return null; const rw_ops = ext.SDL_RWFromFile(path_string, "rb") orelse return null; diff --git a/source/ona/kym.zig b/source/ona/kym.zig index 7ec2b26..241d95b 100644 --- a/source/ona/kym.zig +++ b/source/ona/kym.zig @@ -802,9 +802,9 @@ pub const RuntimeEnv = struct { }); pub const Options = struct { - import_access: file.Access, - print: *const Printer, - print_error: *const Printer, + import_access: file.Access = .null, + print: ?*const Printer = null, + print_error: ?*const Printer = null, }; pub const Printer = fn (buffer: []const coral.io.Byte) void; @@ -1185,21 +1185,29 @@ pub const RuntimeEnv = struct { } pub fn print(self: *RuntimeEnv, buffer: []const coral.io.Byte) void { - self.options.print(buffer); + if (self.options.print) |bound_print| { + bound_print(buffer); + } + } + + pub fn print_error(self: *RuntimeEnv, buffer: []const coral.io.Byte) void { + if (self.options.print_error) |bound_print_error| { + bound_print_error(buffer); + } } pub fn raise(self: *RuntimeEnv, error_value: RuntimeError, message: []const coral.io.Byte) RuntimeError { - self.options.print_error(message); + self.print_error(message); if (!self.frames.is_empty()) { - self.options.print_error("stack trace:"); + self.print_error("stack trace:"); var remaining_frames = self.frames.values.len; while (remaining_frames != 0) { remaining_frames -= 1; - self.options.print_error(self.frames.values[remaining_frames].name); + self.print_error(self.frames.values[remaining_frames].name); } }