make args live through lifetime of runner
we just assign cloned runners the args of the parent runner and don't free the parent's, maintaining okay memory usage.
This commit is contained in:
parent
c78ca9dd5b
commit
a2ea8fb53e
1 changed files with 12 additions and 7 deletions
|
@ -26,10 +26,13 @@ pub const Runner = struct {
|
|||
/// If the runner is in REPL mode
|
||||
repl: bool = false,
|
||||
|
||||
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,11 @@ 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,
|
||||
.args = self.args,
|
||||
};
|
||||
}
|
||||
|
||||
fn resolveArg(self: *Runner, load_path: []const u8) ![]const u8 {
|
||||
|
@ -57,14 +64,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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue