diff options
| author | nsfisis <nsfisis@gmail.com> | 2025-05-04 20:48:41 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2025-05-04 20:48:41 +0900 |
| commit | 6c12928c82d694b7b7b96a7b08d61d211f966867 (patch) | |
| tree | d00076a18a30b2b4f61341d7637f8c1f52905af6 /main.c | |
| parent | 4126ae8633a1bb495df28591ebf67f8f7d2c28cc (diff) | |
| download | P4Dcc-6c12928c82d694b7b7b96a7b08d61d211f966867.tar.gz P4Dcc-6c12928c82d694b7b7b96a7b08d61d211f966867.tar.zst P4Dcc-6c12928c82d694b7b7b96a7b08d61d211f966867.zip | |
array subscript
Diffstat (limited to 'main.c')
| -rw-r--r-- | main.c | 12 |
1 files changed, 12 insertions, 0 deletions
@@ -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); |
