Commit ae324985a6

Andrew Kelley <andrew@ziglang.org>
2020-01-09 05:55:22
clean up a TODO in self-hosted
1 parent 5e345ff
Changed files (1)
src-self-hosted
src-self-hosted/main.zig
@@ -58,8 +58,7 @@ pub fn main() !void {
     stderr = &stderr_file.outStream().stream;
 
     const args = try process.argsAlloc(allocator);
-    // TODO I'm getting unreachable code here, which shouldn't happen
-    //defer process.argsFree(allocator, args);
+    defer process.argsFree(allocator, args);
 
     if (args.len <= 1) {
         try stderr.write("expected command argument\n\n");
@@ -67,64 +66,33 @@ pub fn main() !void {
         process.exit(1);
     }
 
-    const commands = [_]Command{
-        Command{
-            .name = "build-exe",
-            .exec = cmdBuildExe,
-        },
-        Command{
-            .name = "build-lib",
-            .exec = cmdBuildLib,
-        },
-        Command{
-            .name = "build-obj",
-            .exec = cmdBuildObj,
-        },
-        Command{
-            .name = "fmt",
-            .exec = cmdFmt,
-        },
-        Command{
-            .name = "libc",
-            .exec = cmdLibC,
-        },
-        Command{
-            .name = "targets",
-            .exec = cmdTargets,
-        },
-        Command{
-            .name = "version",
-            .exec = cmdVersion,
-        },
-        Command{
-            .name = "zen",
-            .exec = cmdZen,
-        },
-
-        // undocumented commands
-        Command{
-            .name = "help",
-            .exec = cmdHelp,
-        },
-        Command{
-            .name = "internal",
-            .exec = cmdInternal,
-        },
-    };
-
-    inline for (commands) |command| {
-        if (mem.eql(u8, command.name, args[1])) {
-            var frame = try allocator.create(@Frame(command.exec));
-            defer allocator.destroy(frame);
-            frame.* = async command.exec(allocator, args[2..]);
-            return await frame;
-        }
+    const cmd = args[1];
+    const cmd_args = args[2..];
+    if (mem.eql(u8, cmd, "build-exe")) {
+        return buildOutputType(allocator, cmd_args, .Exe);
+    } else if (mem.eql(u8, cmd, "build-lib")) {
+        return buildOutputType(allocator, cmd_args, .Lib);
+    } else if (mem.eql(u8, cmd, "build-obj")) {
+        return buildOutputType(allocator, cmd_args, .Obj);
+    } else if (mem.eql(u8, cmd, "fmt")) {
+        return cmdFmt(allocator, cmd_args);
+    } else if (mem.eql(u8, cmd, "libc")) {
+        return cmdLibC(allocator, cmd_args);
+    } else if (mem.eql(u8, cmd, "targets")) {
+        return cmdTargets(allocator, cmd_args);
+    } else if (mem.eql(u8, cmd, "version")) {
+        return cmdVersion(allocator, cmd_args);
+    } else if (mem.eql(u8, cmd, "zen")) {
+        return cmdZen(allocator, cmd_args);
+    } else if (mem.eql(u8, cmd, "help")) {
+        return cmdHelp(allocator, cmd_args);
+    } else if (mem.eql(u8, cmd, "internal")) {
+        return cmdInternal(allocator, cmd_args);
+    } else {
+        try stderr.print("unknown command: {}\n\n", .{args[1]});
+        try stderr.write(usage);
+        process.exit(1);
     }
-
-    try stderr.print("unknown command: {}\n\n", .{args[1]});
-    try stderr.write(usage);
-    process.argsFree(allocator, args);
-    process.exit(1);
 }
 
 const usage_build_generic =
@@ -555,18 +523,6 @@ fn processBuildEvents(comp: *Compilation, color: errmsg.Color) void {
     }
 }
 
-fn cmdBuildExe(allocator: *Allocator, args: []const []const u8) !void {
-    return buildOutputType(allocator, args, Compilation.Kind.Exe);
-}
-
-fn cmdBuildLib(allocator: *Allocator, args: []const []const u8) !void {
-    return buildOutputType(allocator, args, Compilation.Kind.Lib);
-}
-
-fn cmdBuildObj(allocator: *Allocator, args: []const []const u8) !void {
-    return buildOutputType(allocator, args, Compilation.Kind.Obj);
-}
-
 pub const usage_fmt =
     \\usage: zig fmt [file]...
     \\