diff options
Diffstat (limited to 'bootstrap/parse.c')
| -rw-r--r-- | bootstrap/parse.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/bootstrap/parse.c b/bootstrap/parse.c index d55339d..4372cdc 100644 --- a/bootstrap/parse.c +++ b/bootstrap/parse.c @@ -922,6 +922,17 @@ pexprimary(struct parser *P) { ex = parsestructini(P, P->targty); else if (P->targty->t == TYarr) ex = parsearrini(P, P->targty); + } else if (lexmatch(P, &tok, TKkw_sizeof)) { + ex.t = Eintlit; + ex.ty = ty_usize; + if (lexmatch(P, &tok, '(')) { + struct expr exp = parseexpr(P); + ex.i = exp.ty->size; + lexexpect(P, ')'); + } else { + const struct type *ty = parsetype(P); + ex.i = ty->size; + } } else { experr: fatal(P, tok.span, "expected expression (near %s)", tok2str(tok)); |