Commit 75bbc74d56

Andrew Kelley <andrew@ziglang.org>
2022-02-01 06:25:49
a small crusade against std.meta.declarations
1 parent aa32632
lib/std/crypto.zig
@@ -164,31 +164,93 @@ const std = @import("std.zig");
 
 pub const errors = @import("crypto/errors.zig");
 
-test "crypto" {
+test {
     const please_windows_dont_oom = @import("builtin").os.tag == .windows;
     if (please_windows_dont_oom) return error.SkipZigTest;
 
-    inline for (std.meta.declarations(@This())) |decl| {
-        switch (decl.data) {
-            .Type => |t| {
-                if (@typeInfo(t) != .ErrorSet) {
-                    std.testing.refAllDecls(t);
-                }
-            },
-            .Var => |v| {
-                _ = v;
-            },
-            .Fn => |f| {
-                _ = f;
-            },
-        }
-    }
+    _ = aead.aegis.Aegis128L;
+    _ = aead.aegis.Aegis256;
+
+    _ = aead.aes_gcm.Aes128Gcm;
+    _ = aead.aes_gcm.Aes256Gcm;
+
+    _ = aead.aes_ocb.Aes128Ocb;
+    _ = aead.aes_ocb.Aes256Ocb;
+
+    _ = aead.Gimli;
+
+    _ = aead.chacha_poly.ChaCha20Poly1305;
+    _ = aead.chacha_poly.ChaCha12Poly1305;
+    _ = aead.chacha_poly.ChaCha8Poly1305;
+    _ = aead.chacha_poly.XChaCha20Poly1305;
+    _ = aead.chacha_poly.XChaCha12Poly1305;
+    _ = aead.chacha_poly.XChaCha8Poly1305;
+
+    _ = aead.isap;
+    _ = aead.salsa_poly.XSalsa20Poly1305;
+
+    _ = auth.hmac;
+    _ = auth.siphash;
+
+    _ = core.aes;
+    _ = core.Gimli;
+    _ = core.modes;
+
+    _ = dh.X25519;
+
+    _ = ecc.Curve25519;
+    _ = ecc.Edwards25519;
+    _ = ecc.P256;
+    _ = ecc.Ristretto255;
+
+    _ = hash.blake2;
+    _ = hash.Blake3;
+    _ = hash.Gimli;
+    _ = hash.Md5;
+    _ = hash.Sha1;
+    _ = hash.sha2;
+    _ = hash.sha3;
+
+    _ = kdf.hkdf;
+
+    _ = onetimeauth.Ghash;
+    _ = onetimeauth.Poly1305;
+
+    _ = pwhash.Encoding;
+
+    _ = pwhash.Error;
+    _ = pwhash.HasherError;
+    _ = pwhash.KdfError;
+
+    _ = pwhash.argon2;
+    _ = pwhash.bcrypt;
+    _ = pwhash.scrypt;
+    _ = pwhash.pbkdf2;
+
+    _ = pwhash.phc_format;
+
+    _ = sign.Ed25519;
+
+    _ = stream.chacha.ChaCha20IETF;
+    _ = stream.chacha.ChaCha12IETF;
+    _ = stream.chacha.ChaCha8IETF;
+    _ = stream.chacha.ChaCha20With64BitNonce;
+    _ = stream.chacha.ChaCha12With64BitNonce;
+    _ = stream.chacha.ChaCha8With64BitNonce;
+    _ = stream.chacha.XChaCha20IETF;
+    _ = stream.chacha.XChaCha12IETF;
+    _ = stream.chacha.XChaCha8IETF;
+
+    _ = stream.salsa.Salsa20;
+    _ = stream.salsa.XSalsa20;
+
+    _ = nacl.Box;
+    _ = nacl.SecretBox;
+    _ = nacl.SealedBox;
 
-    _ = @import("crypto/aegis.zig");
-    _ = @import("crypto/aes_gcm.zig");
-    _ = @import("crypto/aes_ocb.zig");
-    _ = @import("crypto/blake2.zig");
-    _ = @import("crypto/chacha20.zig");
+    _ = utils;
+    _ = random;
+    _ = errors;
 }
 
 test "CSPRNG" {
lib/std/meta.zig
@@ -361,6 +361,8 @@ test "std.meta.containerLayout" {
     try testing.expect(containerLayout(U3) == .Extern);
 }
 
+/// Instead of this function, prefer to use e.g. `@TypeInfo(foo).Struct.decls`
+/// directly when you know what kind of type it is.
 pub fn declarations(comptime T: type) []const TypeInfo.Declaration {
     return switch (@typeInfo(T)) {
         .Struct => |info| info.decls,
lib/std/target.zig
@@ -1236,7 +1236,7 @@ pub const Target = struct {
             }
 
             fn allCpusFromDecls(comptime cpus: type) []const *const Cpu.Model {
-                const decls = std.meta.declarations(cpus);
+                const decls = @typeInfo(cpus).Struct.decls;
                 var array: [decls.len]*const Cpu.Model = undefined;
                 for (decls) |decl, i| {
                     array[i] = &@field(cpus, decl.name);
lib/std/testing.zig
@@ -465,7 +465,7 @@ test {
 /// Given a type, reference all the declarations inside, so that the semantic analyzer sees them.
 pub fn refAllDecls(comptime T: type) void {
     if (!builtin.is_test) return;
-    inline for (std.meta.declarations(T)) |decl| {
+    inline for (comptime std.meta.declarations(T)) |decl| {
         _ = decl;
     }
 }