Defer statement

Instead of a try finally statement a defer statement can be used.

Any statements following the defer in the current block will be considered to be in an implicit try block:

  1. proc main =
  2. var f = open("numbers.txt")
  3. defer: close(f)
  4. f.write "abc"
  5. f.write "def"

Is rewritten to:

  1. proc main =
  2. var f = open("numbers.txt")
  3. try:
  4. f.write "abc"
  5. f.write "def"
  6. finally:
  7. close(f)

Top level defer statements are not supported since it’s unclear what such a statement should refer to.