Compare commits

..

No commits in common. "b28f208e659b5ef50258b0ea579f27529c81eff3" and "a9e4c5823a063ee7dcade1211b59f505d13a5b69" have entirely different histories.

1 changed files with 13 additions and 20 deletions

View File

@ -527,6 +527,9 @@ pub const Lang = struct {
else => true,
};
// TODO: crash when no arguments are left but we still need
// arguments...
if (is_lv2_command) {
const split = tok_it.next();
if (split == null) {
@ -568,14 +571,7 @@ pub const Lang = struct {
continue;
}
}
const arg_opt = tok_it.next();
if (arg_opt == null) {
self.doError("Expected parameter for {s}, got nothing", .{cmd_field.name});
return;
}
const arg = arg_opt.?;
const arg = tok_it.next().?;
const argument_value = switch (cmd_field.field_type) {
usize => try std.fmt.parseInt(usize, arg, 10),
i32 => try std.fmt.parseInt(i32, arg, 10),
@ -647,10 +643,7 @@ pub const Lang = struct {
// in a variable because then that variable must be comptime.
// the drawback of this approach is that our emitted code is basically linear
// because we don't use the hashmap anymore.
//
// Attempting to use ComptimeHashMap hits compiler bugs and I'm
// not sure if we can map strings to *types* in it.
// because we don't use the hashmap anymore. maybe #5359 can help.
if (std.mem.eql(u8, &lowered_command_name, command_string)) {
found = true;
@ -672,18 +665,18 @@ pub const Lang = struct {
};
test "noop" {
var lang = Lang.init(std.testing.allocator);
var lang = Lang.init(std.heap.direct_allocator);
defer lang.deinit();
var cmds = try lang.parse("noop;");
defer cmds.deinit();
std.testing.expectEqual(cmds.list.items.len, 1);
std.testing.expectEqual(cmds.list.items[0].tag, .noop);
std.testing.expectEqual(cmds.len, 1);
std.testing.expectEqual(cmds.items[0].command, .Noop);
}
test "load, phaser, quicksave" {
var lang = Lang.init(std.testing.allocator);
var lang = Lang.init(std.heap.direct_allocator);
defer lang.deinit();
const prog =
@ -695,8 +688,8 @@ test "load, phaser, quicksave" {
var cmds = try lang.parse(prog);
defer cmds.deinit();
std.testing.expectEqual(cmds.list.items.len, 3);
std.testing.expectEqual(cmds.list.items[0].tag, .load);
std.testing.expectEqual(cmds.list.items[1].tag, .phaser);
std.testing.expectEqual(cmds.list.items[2].tag, .quicksave);
std.testing.expectEqual(cmds.len, 3);
std.testing.expectEqual(cmds.items[0].command, .Load);
std.testing.expectEqual(cmds.items[1].command, .Phaser);
std.testing.expectEqual(cmds.items[2].command, .Quicksave);
}