From f6a7ba6ab9c3b43961a56b1a54f9107ae06aa343 Mon Sep 17 00:00:00 2001 From: Pablo Alessandro Santos Hugen Date: Thu, 5 Mar 2026 22:03:19 -0300 Subject: [PATCH] std.cli: ?[]T now is null on empty slices Signed-off-by: Pablo Alessandro Santos Hugen --- lib/std/cli.zig | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/std/cli.zig b/lib/std/cli.zig index ec422659b8..f3a13ebf34 100644 --- a/lib/std/cli.zig +++ b/lib/std/cli.zig @@ -212,10 +212,17 @@ fn parseBool(comptime T: type, iter: *Iterator) Error!T { } fn parseOptional(comptime T: type, iter: *Iterator, allocator: Allocator) (Error || Allocator.Error)!T { - return parseValue(@typeInfo(T).optional.child, iter, allocator) catch |err| switch (err) { + const ChildT = @typeInfo(T).optional.child; + const val = parseValue(ChildT, iter, allocator) catch |err| return switch (err) { Error.MissingValue => null, else => err, }; + // Optional steals empty state from slices + const child_info = @typeInfo(ChildT); + return if (child_info == .pointer and child_info.pointer.size == .slice and val.len == 0) + null + else + val; } inline fn flagName(arg: []const u8) ?[]const u8 {