From 6c12928c82d694b7b7b96a7b08d61d211f966867 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sun, 4 May 2025 20:48:41 +0900 Subject: array subscript --- main.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'main.c') 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); -- cgit v1.2.3-70-g09d2