aboutsummaryrefslogtreecommitdiff
path: root/src/parse.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/parse.zig')
-rw-r--r--src/parse.zig13
1 files changed, 5 insertions, 8 deletions
diff --git a/src/parse.zig b/src/parse.zig
index 752eafb..f6fc0bc 100644
--- a/src/parse.zig
+++ b/src/parse.zig
@@ -295,7 +295,7 @@ fn parseProc(allocator: Allocator, lexer: *Lexer) ParseError!*Expr {
const param: ?Location = switch (param_tok.type) {
.identifier => param_tok.loc,
.right_paren => null,
- else => |ty| return expected(&.{ .identifier, .right_paren }, ty),
+ else => return expected(&.{ .identifier, .right_paren }, param_tok),
};
if (param != null) _ = try mustEat(lexer, .right_paren);
const body = try parseBlock(allocator, lexer);
@@ -395,21 +395,18 @@ fn parsePrimaryExpr(allocator: Allocator, lexer: *Lexer) !*Expr {
},
.integer_literal => .{ .loc = token.loc, .type = .integer_literal },
.identifier => .{ .loc = token.loc, .type = .identifier },
- else => |t| {
- std.debug.print("Expected '(', integer literal, or identifier. Got '{s}'\n", .{@tagName(t)});
- return error.UnexpectedToken;
- },
+ else => return expected(&.{ .left_paren, .integer_literal, .identifier }, token),
});
}
-fn expected(one_of: []const Token.Type, got: Token.Type) error{UnexpectedToken} {
+fn expected(one_of: []const Token.Type, got: Token) error{UnexpectedToken} {
for (one_of) |ty|
- std.debug.assert(ty != got);
+ std.debug.assert(ty != got.type);
std.debug.print("Expected ", .{});
for (0.., one_of) |i, ty| {
std.debug.print("{s}{s}", .{ if (i == 0) "" else " or ", @tagName(ty) });
}
- std.debug.print(". Got {s}.\n", .{@tagName(got)});
+ std.debug.print(". Got {s} at {}.\n", .{ @tagName(got.type), got.loc });
return error.UnexpectedToken;
}