diff --git a/src/main.zig b/src/main.zig index 7d6cc00..be1b672 100644 --- a/src/main.zig +++ b/src/main.zig @@ -222,9 +222,9 @@ pub fn doRepl(allocator: *std.mem.Allocator, args_it: var) !void { // taking address is fine, because runqs_cmd lives in the lifetime // of this function. - try cmds.append(&runqs_cmd.base); + try cmds_parsed.append(&runqs_cmd.base); - try runner_clone.runCommands(cmds, true); + try runner_clone.runCommands(cmds_parsed, true); _ = try stdout.write("\n"); } } diff --git a/src/runner.zig b/src/runner.zig index 234e59e..a089a67 100644 --- a/src/runner.zig +++ b/src/runner.zig @@ -24,12 +24,15 @@ pub const Runner = struct { image: ?*Image = null, /// If the runner is in REPL mode - repl: bool = false, + repl: bool, + + args: [][]u8, pub fn init(allocator: *std.mem.Allocator, repl: bool) Runner { return Runner{ .allocator = allocator, .repl = repl, + .args = std.process.argsAlloc(allocator) catch unreachable, }; } @@ -41,7 +44,12 @@ pub const Runner = struct { pub fn clone(self: *Runner) !Runner { var cloned_image = if (self.image) |image| try image.clone() else null; - return Runner{ .allocator = self.allocator, .image = cloned_image }; + return Runner{ + .allocator = self.allocator, + .image = cloned_image, + .repl = self.repl, + .args = self.args, + }; } fn resolveArg(self: *Runner, load_path: []const u8) ![]const u8 { @@ -57,14 +65,12 @@ pub const Runner = struct { // ':0' should ALWAYS point to the image. if (self.repl) index += 3 else index += 2; - var args = try std.process.argsAlloc(self.allocator); - defer std.process.argsFree(self.allocator, args); - std.debug.warn("ARGS!! {} \n", .{args.len}); - for (args) |arg, idx| { + std.debug.warn("ARGS!! {} \n", .{self.args.len}); + for (self.args) |arg, idx| { std.debug.warn("arg{} = {}\n", .{ idx, arg }); } - std.debug.warn("fetch arg idx={}, val={}\n", .{ index, args[index] }); - return args[index]; + std.debug.warn("fetch arg idx={}, val={}\n", .{ index, self.args[index] }); + return self.args[index]; } else { return load_path; }