aboutsummaryrefslogtreecommitdiffhomepage
path: root/main.c
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2025-05-04 20:48:41 +0900
committernsfisis <nsfisis@gmail.com>2025-05-04 20:48:41 +0900
commit6c12928c82d694b7b7b96a7b08d61d211f966867 (patch)
treed00076a18a30b2b4f61341d7637f8c1f52905af6 /main.c
parent4126ae8633a1bb495df28591ebf67f8f7d2c28cc (diff)
downloadP4Dcc-6c12928c82d694b7b7b96a7b08d61d211f966867.tar.gz
P4Dcc-6c12928c82d694b7b7b96a7b08d61d211f966867.tar.zst
P4Dcc-6c12928c82d694b7b7b96a7b08d61d211f966867.zip
array subscript
Diffstat (limited to 'main.c')
-rw-r--r--main.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/main.c b/main.c
index 162d3a4..9a8de99 100644
--- a/main.c
+++ b/main.c
@@ -770,6 +770,18 @@ struct AstNode* parse_postfix_expr(struct Parser* p) {
struct AstNode* args = parse_arg_list(p);
expect(p, TK_PAREN_R);
ret->expr1 = args;
+ } else if (tk == TK_BRACKET_L) {
+ next_token(p);
+ struct AstNode* idx = parse_expr(p);
+ expect(p, TK_BRACKET_R);
+
+ struct AstNode* e = ast_new(AST_DEREF_EXPR);
+ struct AstNode* ptr_expr = ast_new_binary_expr(TK_PLUS, ret, idx);
+ ptr_expr->ty = ret->ty;
+ e->expr1 = ptr_expr;
+ e->ty = ret->ty->to;
+
+ ret = e;
} else if (tk == TK_DOT) {
next_token(p);
char* name = parse_ident(p);