diff --git a/src/main.zig b/src/main.zig index 1f840b5..1c73b8b 100644 --- a/src/main.zig +++ b/src/main.zig @@ -9,16 +9,18 @@ const Status = helpers.Status; const mlua = @import("mlua.zig"); pub fn main(init: std.process.Init) !void { - const args = try init.minimal.args.toSlice(init.arena.allocator()); - for (1..args.len) |i| { - if (std.mem.eql(u8, args[i], "build")) + var args = init.minimal.args.iterate(); + _ = args.skip(); + + if (args.next()) |arg| { + if (std.mem.eql(u8, arg, "build")) maivi.build = true - else if (std.mem.eql(u8, args[i], "dev")) + else if (std.mem.eql(u8, arg, "dev")) maivi.dev = true - else if (std.mem.eql(u8, args[i], "-l")) { + else if (std.mem.eql(u8, arg, "-l")) return mlua.main(init); - } } + maivi.dev = maivi.dev or (!maivi.build and (if (init.environ_map.get("MAIVI_DEV")) |_| true else false)); const config: maivi.Config = try .init(init.io, init.arena, init.environ_map); diff --git a/src/mlua.zig b/src/mlua.zig index d521864..c4435a6 100644 --- a/src/mlua.zig +++ b/src/mlua.zig @@ -4,9 +4,6 @@ const maivi = @import("maivi"); const fern = @import("fern"); pub fn main(init: std.process.Init) !void { - var args: []const [*:0]const u8 = init.minimal.args.vector[1..]; - if (args.len > 0 and std.mem.eql(u8, std.mem.span(args[0]), "-l")) args = args[1..]; - const config: maivi.Config = try .init(init.io, init.arena, init.environ_map); maivi.io = init.io; @@ -25,23 +22,31 @@ pub fn main(init: std.process.Init) !void { try maivi.lua.init(); defer maivi.lua.deinit(); - if (args.len < 1) { - std.debug.print("USAGE: nlua0 script.lua args...\n\n", .{}); - return; - } - try eval(maivi.lua.lua, init.arena.allocator(), args); + var args = init.minimal.args.iterate(); + _ = args.skip(); + + eval(maivi.lua.lua, init.arena.allocator(), &args) catch |e| switch (e) { + error.NoArgs => std.debug.print("USAGE: nlua0 script.lua args...\n\n", .{}), + else => return e, + }; } -pub fn eval(l: *maivi.lua.Lua, _: std.mem.Allocator, args: []const [*:0]const u8) !void { - l.createTable(@intCast(args.len - 1), 1); +pub fn eval(l: *maivi.lua.Lua, _: std.mem.Allocator, args: *std.process.Args.Iterator) !void { + const firstarg = blk: { + const first = args.next(); + if (first) |arg| if (std.mem.eql(u8, arg, "-l")) break :blk args.next(); + break :blk first; + } orelse return error.NoArgs; - var firstarg: [:0]const u8 = undefined; - for (args, 0..) |val, i| { - _ = l.pushString(std.mem.span(val)); - if (i == 0) { - firstarg = try l.toString(-1); // preserved on lua heap.. - } - l.setIndexRaw(-2, @intCast(i)); + // assumes posix args + l.createTable(@intCast(args.inner.remaining.len), 1); + _ = l.pushString(firstarg); + l.setIndexRaw(-2, 1); + + var i: i32 = 2; + while (args.next()) |arg| : (i += 1) { + _ = l.pushString(arg); + l.setIndexRaw(-2, i); } l.setGlobal("args");