aboutsummaryrefslogtreecommitdiff
path: root/src/parser/parser.c
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2026-08-31 01:11:54 +0200
committerhachem <im@hachem.wtf>2026-08-31 01:11:54 +0200
commitcf24f576891ece60bdf04928d3c39dd0bbb9b5f6 (patch)
treef0e5492dca4e0c3bbbff256c2c1fa98b15dcfab5 /src/parser/parser.c
parent3e20038bbf7206e2270655418d7884ccfe91a4e4 (diff)
feat: add logical_registers
Diffstat (limited to 'src/parser/parser.c')
-rw-r--r--src/parser/parser.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/parser/parser.c b/src/parser/parser.c
index 8603c46..7ec4474 100644
--- a/src/parser/parser.c
+++ b/src/parser/parser.c
@@ -154,11 +154,15 @@ static struct Expr* parse_postfix(struct Parser* parser)
while (match_token(parser, TOKEN_DOT))
{
- if (!consume(parser, TOKEN_IDENTIFIER, "expected member name after '.'"))
+ // an identifier is a member (data.len); an integer is a register size
+ // suffix (r1.64), meaningful with the logical_registers extension
+ if (!check(parser, TOKEN_IDENTIFIER) && !check(parser, TOKEN_INTEGER))
{
+ error_at(parser, parser->current, "expected a member name or size after '.'");
free_expr(expr);
return NULL;
}
+ advance_parser(parser);
struct Expr* member = alloc_expr(EXPR_MEMBER);
member->member.object = expr;