Commit b946982e90

Marc Tiehuis <marctiehuis@gmail.com>
2018-04-13 10:12:30
Use builtin Arch/Os/Environ
1 parent 7fe1c7c
Changed files (1)
src-self-hosted
src-self-hosted/main.zig
@@ -704,156 +704,46 @@ fn cmdFmt(allocator: &Allocator, args: []const []const u8) !void {
 
 // cmd:targets /////////////////////////////////////////////////////////////////////////////////////
 
-// TODO: comptime '@fields' for iteration here instead so we are always in sync.
-const Os = builtin.Os;
-pub const os_list = []const Os {
-    Os.freestanding,
-    Os.ananas,
-    Os.cloudabi,
-    Os.dragonfly,
-    Os.freebsd,
-    Os.fuchsia,
-    Os.ios,
-    Os.kfreebsd,
-    Os.linux,
-    Os.lv2,
-    Os.macosx,
-    Os.netbsd,
-    Os.openbsd,
-    Os.solaris,
-    Os.windows,
-    Os.haiku,
-    Os.minix,
-    Os.rtems,
-    Os.nacl,
-    Os.cnk,
-    Os.aix,
-    Os.cuda,
-    Os.nvcl,
-    Os.amdhsa,
-    Os.ps4,
-    Os.elfiamcu,
-    Os.tvos,
-    Os.watchos,
-    Os.mesa3d,
-    Os.contiki,
-    Os.zen,
-};
-
-const Arch = builtin.Arch;
-pub const arch_list = []const Arch {
-    Arch.armv8_2a,
-    Arch.armv8_1a,
-    Arch.armv8,
-    Arch.armv8r,
-    Arch.armv8m_baseline,
-    Arch.armv8m_mainline,
-    Arch.armv7,
-    Arch.armv7em,
-    Arch.armv7m,
-    Arch.armv7s,
-    Arch.armv7k,
-    Arch.armv7ve,
-    Arch.armv6,
-    Arch.armv6m,
-    Arch.armv6k,
-    Arch.armv6t2,
-    Arch.armv5,
-    Arch.armv5te,
-    Arch.armv4t,
-    Arch.aarch64,
-    Arch.aarch64_be,
-    Arch.avr,
-    Arch.bpfel,
-    Arch.bpfeb,
-    Arch.hexagon,
-    Arch.mips,
-    Arch.mipsel,
-    Arch.mips64,
-    Arch.mips64el,
-    Arch.msp430,
-    Arch.nios2,
-    Arch.powerpc,
-    Arch.powerpc64,
-    Arch.powerpc64le,
-    Arch.r600,
-    Arch.amdgcn,
-    Arch.riscv32,
-    Arch.riscv64,
-    Arch.sparc,
-    Arch.sparcv9,
-    Arch.sparcel,
-    Arch.s390x,
-    Arch.tce,
-    Arch.tcele,
-    Arch.thumb,
-    Arch.thumbeb,
-    Arch.i386,
-    Arch.x86_64,
-    Arch.xcore,
-    Arch.nvptx,
-    Arch.nvptx64,
-    Arch.le32,
-    Arch.le64,
-    Arch.amdil,
-    Arch.amdil64,
-    Arch.hsail,
-    Arch.hsail64,
-    Arch.spir,
-    Arch.spir64,
-    Arch.kalimbav3,
-    Arch.kalimbav4,
-    Arch.kalimbav5,
-    Arch.shave,
-    Arch.lanai,
-    Arch.wasm32,
-    Arch.wasm64,
-    Arch.renderscript32,
-    Arch.renderscript64,
-};
-
-const Environ = builtin.Environ;
-pub const environ_list = []const Environ {
-    Environ.unknown,
-    Environ.gnu,
-    Environ.gnuabi64,
-    Environ.gnueabi,
-    Environ.gnueabihf,
-    Environ.gnux32,
-    Environ.code16,
-    Environ.eabi,
-    Environ.eabihf,
-    Environ.android,
-    Environ.musl,
-    Environ.musleabi,
-    Environ.musleabihf,
-    Environ.msvc,
-    Environ.itanium,
-    Environ.cygnus,
-    Environ.amdopencl,
-    Environ.coreclr,
-    Environ.opencl,
-};
-
 fn cmdTargets(allocator: &Allocator, args: []const []const u8) !void {
     try stdout.write("Architectures:\n");
-    for (arch_list) |arch_tag| {
-        const native_str = if (builtin.arch == arch_tag) " (native) " else "";
-        try stdout.print("  {}{}\n", @tagName(arch_tag), native_str);
+    {
+        comptime var i: usize = 0;
+        inline while (i < @memberCount(builtin.Arch)) : (i += 1) {
+            comptime const arch_tag = @memberName(builtin.Arch, i);
+            // NOTE: Cannot use empty string, see #918.
+            comptime const native_str =
+                if (comptime mem.eql(u8, arch_tag, @tagName(builtin.arch))) " (native)\n" else "\n";
+
+            try stdout.print("  {}{}", arch_tag, native_str);
+        }
     }
     try stdout.write("\n");
 
     try stdout.write("Operating Systems:\n");
-    for (os_list) |os_tag| {
-        const native_str = if (builtin.os == os_tag) " (native) " else "";
-        try stdout.print("  {}{}\n", @tagName(os_tag), native_str);
+    {
+        comptime var i: usize = 0;
+        inline while (i < @memberCount(builtin.Os)) : (i += 1) {
+            comptime const os_tag = @memberName(builtin.Os, i);
+            // NOTE: Cannot use empty string, see #918.
+            comptime const native_str =
+                if (comptime mem.eql(u8, os_tag, @tagName(builtin.os))) " (native)\n" else "\n";
+
+            try stdout.print("  {}{}", os_tag, native_str);
+        }
     }
     try stdout.write("\n");
 
     try stdout.write("Environments:\n");
-    for (environ_list) |environ_tag| {
-        const native_str = if (builtin.environ == environ_tag) " (native) " else "";
-        try stdout.print("  {}{}\n", @tagName(environ_tag), native_str);
+    {
+        comptime var i: usize = 0;
+        inline while (i < @memberCount(builtin.Environ)) : (i += 1) {
+            comptime const environ_tag = @memberName(builtin.Environ, i);
+            // NOTE: Cannot use empty string, see #918.
+            comptime const native_str =
+                if (comptime mem.eql(u8, environ_tag, @tagName(builtin.environ))) " (native)\n" else "\n";
+
+            try stdout.print("  {}{}", environ_tag, native_str);
+        }
     }
 }