Merge pull request #2748 from ghostty-org/push-zzqzxrsnqrtn

cli: parseCLI for optionals should not be null in release modes
This commit is contained in:
Mitchell Hashimoto
2024-11-20 19:18:31 -08:00
committed by GitHub

View File

@ -256,10 +256,20 @@ pub fn parseIntoField(
.Enum, .Enum,
=> try @field(dst, field.name).parseCLI(value), => try @field(dst, field.name).parseCLI(value),
.Optional => { // If the field is optional and set, then we use
@field(dst, field.name) = undefined; // the pointer value directly into it. If its not
try @field(dst, field.name).?.parseCLI(value); // set we need to create a new instance.
.Optional => if (@field(dst, field.name)) |*v| {
try v.parseCLI(value);
} else {
// Note: you cannot do @field(dst, name) = undefined
// because this causes the value to be "null"
// in ReleaseFast modes.
var tmp: Field = undefined;
try tmp.parseCLI(value);
@field(dst, field.name) = tmp;
}, },
else => @compileError("unexpected field type"), else => @compileError("unexpected field type"),
}, },
@ -270,10 +280,14 @@ pub fn parseIntoField(
.Enum, .Enum,
=> try @field(dst, field.name).parseCLI(alloc, value), => try @field(dst, field.name).parseCLI(alloc, value),
.Optional => { .Optional => if (@field(dst, field.name)) |*v| {
@field(dst, field.name) = undefined; try v.parseCLI(alloc, value);
try @field(dst, field.name).?.parseCLI(alloc, value); } else {
var tmp: Field = undefined;
try tmp.parseCLI(alloc, value);
@field(dst, field.name) = tmp;
}, },
else => @compileError("unexpected field type"), else => @compileError("unexpected field type"),
}, },