| author | |
| committer | |
| log | 6a9c9afbae24897a5c6fa843794be33e4ed33f12 |
| tree | fa6bfa60f1e195006865c0c26136ff550cd944e3 |
| parent | 86a98b172be5060110efdd9c61415c841042564e |
2 files changed, 9 insertions(+), 0 deletions(-)
src/Sema.zig+5| ... | ... | @@ -7790,6 +7790,11 @@ fn zirHasField(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 7790 | 7790 | if (mem.eql(u8, field_name, "len")) break :hf true; |
| 7791 | 7791 | break :hf false; |
| 7792 | 7792 | } |
| 7793 | if (ty.castTag(.anon_struct)) |pl| { | |
| 7794 | break :hf for (pl.data.names) |name| { | |
| 7795 | if (mem.eql(u8, name, field_name)) break true; | |
| 7796 | } else false; | |
| 7797 | } | |
| 7793 | 7798 | break :hf switch (ty.zigTypeTag()) { |
| 7794 | 7799 | .Struct => ty.structFields().contains(field_name), |
| 7795 | 7800 | .Union => ty.unionFields().contains(field_name), |
test/behavior/hasfield.zig+4| ... | ... | @@ -34,4 +34,8 @@ test "@hasField" { |
| 34 | 34 | try expect(@hasField(enm, "b") == true); |
| 35 | 35 | try expect(@hasField(enm, "non-existant") == false); |
| 36 | 36 | try expect(@hasField(enm, "nope") == false); |
| 37 | ||
| 38 | const anon = @TypeOf(.{ .a = 1 }); | |
| 39 | try expect(@hasField(anon, "a") == true); | |
| 40 | try expect(@hasField(anon, "b") == false); | |
| 37 | 41 | } |