diff options
| author | nsfisis <nsfisis@gmail.com> | 2025-08-02 02:03:20 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2025-08-15 10:06:21 +0900 |
| commit | be7b759113e76223025cd025cf0172849385b444 (patch) | |
| tree | f1f00183656f6865011a6148629025ec509960e9 /parse.c | |
| parent | 0d8eeaad5427840c1977654749c0f2e79644222e (diff) | |
| download | ducc-be7b759113e76223025cd025cf0172849385b444.tar.gz ducc-be7b759113e76223025cd025cf0172849385b444.tar.zst ducc-be7b759113e76223025cd025cf0172849385b444.zip | |
feat: support sizeof() for variables
Diffstat (limited to 'parse.c')
| -rw-r--r-- | parse.c | 13 |
1 files changed, 12 insertions, 1 deletions
@@ -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)); } |
