clean up a TODO in self-hosted

This commit is contained in:
Andrew Kelley 2020-01-08 23:55:22 -05:00
parent 5e345ff0ee
commit ae324985a6
No known key found for this signature in database
GPG Key ID: 7C5F548F728501A9

View File

@ -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]...
\\