aboutsummaryrefslogtreecommitdiffhomepage
path: root/parse.c
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2025-08-02 02:03:20 +0900
committernsfisis <nsfisis@gmail.com>2025-08-15 10:06:21 +0900
commitbe7b759113e76223025cd025cf0172849385b444 (patch)
treef1f00183656f6865011a6148629025ec509960e9 /parse.c
parent0d8eeaad5427840c1977654749c0f2e79644222e (diff)
downloadducc-be7b759113e76223025cd025cf0172849385b444.tar.gz
ducc-be7b759113e76223025cd025cf0172849385b444.tar.zst
ducc-be7b759113e76223025cd025cf0172849385b444.zip
feat: support sizeof() for variables
Diffstat (limited to 'parse.c')
-rw-r--r--parse.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/parse.c b/parse.c
index b1e65d4..b8ad901 100644
--- a/parse.c
+++ b/parse.c
@@ -403,7 +403,18 @@ AstNode* parse_prefix_expr(Parser* p) {
} else if (op == TokenKind_keyword_sizeof) {
next_token(p);
expect(p, TokenKind_paren_l);
- Type* ty = parse_type(p);
+ Token* next_tok = peek_token(p);
+ Type* ty = NULL;
+ if (next_tok->kind == TokenKind_ident) {
+ int lvar_idx = find_lvar(p, &next_tok->raw);
+ if (lvar_idx != -1) {
+ next_token(p);
+ ty = p->lvars[lvar_idx].ty;
+ }
+ }
+ if (!ty) {
+ ty = parse_type(p);
+ }
expect(p, TokenKind_paren_r);
return ast_new_int(type_sizeof(ty));
}