aboutsummaryrefslogtreecommitdiff
path: root/src/parser.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2024-03-23 16:51:04 +0000
committergingerBill <bill@gingerbill.org>2024-03-23 16:51:04 +0000
commit1d46adb598328b4977d5b4cfad2a1dc679b05a21 (patch)
treec74cbdb96967efbb05b58e6f4a059f7d5123bb8f /src/parser.cpp
parent61aa4558dc864019192072ff9a7f1f1ee23096bf (diff)
Treat `*x` as an unary operator to improve error messages for common C-programmer mistakes
Diffstat (limited to 'src/parser.cpp')
-rw-r--r--src/parser.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/parser.cpp b/src/parser.cpp
index b6b62461f..bb9a526fe 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -2541,6 +2541,9 @@ gb_internal Ast *parse_operand(AstFile *f, bool lhs) {
return ast_pointer_type(f, token, elem);
} break;
+ case Token_Mul:
+ return parse_unary_expr(f, true);
+
case Token_OpenBracket: {
Token token = expect_token(f, Token_OpenBracket);
Ast *count_expr = nullptr;
@@ -3274,7 +3277,9 @@ gb_internal Ast *parse_unary_expr(AstFile *f, bool lhs) {
case Token_Sub:
case Token_Xor:
case Token_And:
- case Token_Not: {
+ case Token_Not:
+ case Token_Mul: // Used for error handling when people do C-like things
+ {
Token token = advance_token(f);
Ast *expr = parse_unary_expr(f, lhs);
return ast_unary_expr(f, token, expr);