aboutsummaryrefslogtreecommitdiffhomepage
path: root/main.c
diff options
context:
space:
mode:
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);