diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/rename.zig | 6 | ||||
-rw-r--r-- | src/root.zig | 14 |
2 files changed, 9 insertions, 11 deletions
diff --git a/src/rename.zig b/src/rename.zig index e4c7e8c..1fdb5ac 100644 --- a/src/rename.zig +++ b/src/rename.zig @@ -108,8 +108,8 @@ fn titleCase(comptime orig: [:0]const u8) [:0]const u8 { return title[0..n:0]; } -fn renamespace(container: type, comptime namespace: [:0]const u8, - comptime excludes: []const []const u8) type { +pub fn space(container: type, comptime namespace: [:0]const u8, + comptime excludes: []const []const u8) type { const src = @typeInfo(container).@"struct".decls; @setEvalBranchQuota(src.len * 1000); var dest: [src.len]StructField = undefined; @@ -146,7 +146,7 @@ fn renamespace(container: type, comptime namespace: [:0]const u8, } }); } -pub const janet = renamespace(@cImport(@cInclude("janet.h")), "janet", &.{ +pub const janet = space(@cImport(@cInclude("janet.h")), "janet", &.{ // Extern variables "janet_type_names", "janet_signal_names", "janet_status_names", "janet_instructions", 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)), }; |