diff options
Diffstat (limited to 'src/root.zig')
-rw-r--r-- | src/root.zig | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/src/root.zig b/src/root.zig index e2f79c8..bcc601d 100644 --- a/src/root.zig +++ b/src/root.zig @@ -287,24 +287,22 @@ pub fn unwrap(T: type, x: Value) !T { .@"struct" => |info| y: { const src = janet.unwrapStruct(x); var dest: T = undefined; - inline for (info.fields) |field| { + break :y inline for (info.fields) |field| { const k = keyword(field.name); const v = janet.structGet(src, k); @field(dest, field.name) = if (isNil(v)) - field.defaultValue() orelse return error.MissingStructField + field.defaultValue() orelse break error.MissingStructField else try unwrap(field.type, v); - } - break :y dest; + } else dest; }, .@"union" => |info| if (info.tag_type != null) y: { const head = janet.tupleHead(janet.unwrapTuple(x)); const k, const v = tupleData(2, head).*; - inline for (info.fields) |field| { + break :y inline for (info.fields) |field| { if (equal(keyword(field.name), k)) - break :y @unionInit(T, field.name, - try unwrap(field.type, v)); - } else break :y error.UnionTagNotFound; + break @unionInit(T, field.name, try unwrap(field.type, v)); + } else error.UnionTagNotFound; } else @compileError("can't wrap untagged union"), else => @compileError(@typeName(T)), }; |