aboutsummaryrefslogtreecommitdiff
path: root/tests/langerrors/defer_continue.zc
Commit message (Collapse)AuthorAgeFilesLines
* zc: add the defer statementGravatar zinc 14 days1-0/+11
defer expr; and defer { ... } register code that runs when the enclosing block ends: at the end of the block, and at return, break and continue that leave it. the tokens are kept at the defer and compiled again at each exit (block_close, body, kw_return, kw_break, kw_continue), newest first, before the block's variables are released, so the analyzer sees a deferred rt.free(p) as the transfer of p where it runs. names mean what they meant at the defer; values are read when it runs. return, break and continue inside a deferred statement are errors, reported once. works in unchecked code and closures (own base per function context).