feat: defer statement support in both compilers

- Add  statement for function-level deferred execution
- Deferred expressions run in LIFO order on function exit (return or implicit)
- Bootstrap: desugar defers in hir_lower.nim (inject before return + end of func)
- Selfhost: emit defers in c_backend.bux via CEmitter defer stack
- Both: add tkDefer token, skDefer AST node, hDefer HIR node
- Parser, lexer, sema, token files updated in both bootstrap/ and src/
This commit is contained in:
2026-06-08 20:59:27 +03:00
parent cf92b63ba6
commit a67271b08c
15 changed files with 385 additions and 4 deletions
+13
View File
@@ -704,6 +704,19 @@ func parserParseStmt(p: *Parser) -> *Stmt {
return s;
}
// defer expr
if kind == tkDefer {
discard parserAdvance(p);
let val: *Expr = parserParseExpr(p);
parserMatch(p, tkSemicolon);
let s: *Stmt = bux_alloc(sizeof(Stmt)) as *Stmt;
s.kind = skDefer;
s.line = line;
s.column = col;
s.child1 = val;
return s;
}
// if
if kind == tkIf {
discard parserAdvance(p);