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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user