Commit 5a91dbc16c

Shawn Landden <shawn@git.icu>
2019-05-27 07:35:35
allow const to be passed to @hasField()
Actually include the tests I wrote
1 parent d1f9b81
Changed files (2)
doc
test
stage1
behavior
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.
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);
+}