commit 5a91dbc16cbe20a95aafb6b3221c4a5a07d9b117 (tree)
parent d1f9b8184d61674a77424f026adfef2752d1dfdd
Author: Shawn Landden <shawn@git.icu>
Date: Mon, 27 May 2019 00:35:35 -0500
allow const to be passed to @hasField()
Actually include the tests I wrote
Diffstat:
2 files changed, 31 insertions(+), 1 deletion(-)
diff --git a/doc/langref.html.in b/doc/langref.html.in
@@ -6868,7 +6868,7 @@ fn add(a: i32, b: i32) i32 { return a + b; }
</p>
{#header_close#}
{#header_open|@hasField#}
- <pre>{#syntax#}@hasField(comptime T: type, comptime name: []u8) bool{#endsyntax#}</pre>
+ <pre>{#syntax#}@hasField(comptime T: type, comptime name: []const u8) bool{#endsyntax#}</pre>
<p>Returns if the field name of a struct, union, or enum exists.</p>
<p>
The result is a compile time constant.
diff --git a/test/stage1/behavior/hasfield.zig b/test/stage1/behavior/hasfield.zig
@@ -0,0 +1,30 @@
+const expect = @import("std").testing.expect;
+const builtin = @import("builtin");
+
+test "@hasField" {
+ const struc = struct {
+ a: i32,
+ b: []u8,
+ };
+ expect(@hasField(struc, "a") == true);
+ expect(@hasField(struc, "b") == true);
+ expect(@hasField(struc, "non-existant") == false);
+
+ const unin = union {
+ a: u64,
+ b: []u16,
+ };
+ expect(@hasField(unin, "a") == true);
+ expect(@hasField(unin, "b") == true);
+ expect(@hasField(unin, "non-existant") == false);
+
+ const enm = enum {
+ a,
+ b,
+ };
+ expect(@hasField(enm, "a") == true);
+ expect(@hasField(enm, "b") == true);
+ expect(@hasField(enm, "non-existant") == false);
+
+ expect(@hasField(builtin, "os") == true);
+}