Skip to content

Commit 9c66fda

Browse files
alichraghiVexu
authored andcommitted
std.testing: add refAllDeclsRecursive function
1 parent 43770c0 commit 9c66fda

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

lib/std/testing.zig

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -723,3 +723,19 @@ pub fn refAllDecls(comptime T: type) void {
723723
if (decl.is_pub) _ = @field(T, decl.name);
724724
}
725725
}
726+
727+
/// Given a type, and Recursively reference all the declarations inside, so that the semantic analyzer sees them.
728+
/// For deep types, you may use `@setEvalBranchQuota`
729+
pub fn refAllDeclsRecursive(comptime T: type) void {
730+
inline for (comptime std.meta.declarations(T)) |decl| {
731+
if (decl.is_pub) {
732+
if (@TypeOf(@field(T, decl.name)) == type) {
733+
switch (@typeInfo(@field(T, decl.name))) {
734+
.Struct, .Enum, .Union, .Opaque => refAllDeclsRecursive(@field(T, decl.name)),
735+
else => {},
736+
}
737+
}
738+
_ = @field(T, decl.name);
739+
}
740+
}
741+
}

0 commit comments

Comments
 (0)