From 185778aa3ae35252ae992f12a9dfc39a4eab5758 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sun, 3 Aug 2025 01:34:04 +0900 Subject: refactor: refactor handling of array/pointer types --- parse.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'parse.c') diff --git a/parse.c b/parse.c index 70cf9d0..b9b8700 100644 --- a/parse.c +++ b/parse.c @@ -334,7 +334,7 @@ AstNode* parse_postfix_expr(Parser* p) { next_token(p); AstNode* idx = parse_expr(p); expect(p, TokenKind_bracket_r); - idx = ast_new_binary_expr(TokenKind_star, idx, ast_new_int(type_sizeof(ret->ty->to))); + idx = ast_new_binary_expr(TokenKind_star, idx, ast_new_int(type_sizeof(ret->ty->base))); ret = ast_new_deref_expr(ast_new_binary_expr(TokenKind_plus, ret, idx)); } else if (tk == TokenKind_dot) { next_token(p); @@ -498,27 +498,27 @@ AstNode* parse_additive_expr(Parser* p) { if (op == TokenKind_plus) { next_token(p); rhs = parse_multiplicative_expr(p); - if (lhs->ty->kind == TypeKind_ptr) { + if (lhs->ty->base) { lhs = ast_new_binary_expr( - op, lhs, ast_new_binary_expr(TokenKind_star, rhs, ast_new_int(type_sizeof(lhs->ty->to)))); - } else if (rhs->ty->kind == TypeKind_ptr) { + op, lhs, ast_new_binary_expr(TokenKind_star, rhs, ast_new_int(type_sizeof(lhs->ty->base)))); + } else if (rhs->ty->base) { lhs = ast_new_binary_expr( - op, ast_new_binary_expr(TokenKind_star, lhs, ast_new_int(type_sizeof(rhs->ty->to))), rhs); + op, ast_new_binary_expr(TokenKind_star, lhs, ast_new_int(type_sizeof(rhs->ty->base))), rhs); } else { lhs = ast_new_binary_expr(op, lhs, rhs); } } else if (op == TokenKind_minus) { next_token(p); rhs = parse_multiplicative_expr(p); - if (lhs->ty->kind == TypeKind_ptr) { - if (rhs->ty->kind == TypeKind_ptr) { + if (lhs->ty->base) { + if (rhs->ty->base) { // (a - b) / sizeof(a) lhs = ast_new_binary_expr(TokenKind_slash, ast_new_binary_expr(op, lhs, rhs), - ast_new_int(type_sizeof(lhs->ty->to))); + ast_new_int(type_sizeof(lhs->ty->base))); } else { // a - b*sizeof(a) lhs = ast_new_binary_expr( - op, lhs, ast_new_binary_expr(TokenKind_star, rhs, ast_new_int(type_sizeof(lhs->ty->to)))); + op, lhs, ast_new_binary_expr(TokenKind_star, rhs, ast_new_int(type_sizeof(lhs->ty->base)))); } } else { lhs = ast_new_binary_expr(op, lhs, rhs); -- cgit v1.2.3-70-g09d2