# dmd.blockexit

Find out in what ways control flow can exit a statement block.

#### Authors

Walter Bright

#### License

Boost License 1.0

Source: blockexit.d

Documentation: https://dlang.org/phobos/dmd_blockexit.html

Coverage: https://codecov.io/gh/dlang/dmd/src/master/src/dmd/blockexit.d

- `BE`

  #### Declaration

  `enum `BE`: int;`

  `BE` stands for BlockExit.

  #### Discussion

  It indicates if a statement does transfer control to another block. A block is a sequence of statements enclosed in { }

- `blockExit`

  #### Declaration

  `int `blockExit`(Statement `s`, FuncDeclaration `func`, ErrorSink `eSink`);`

  Determine mask of ways that a statement can exit.

  #### Discussion

  Only valid after semantic analysis.

  #### Parameters

  `Statement `s`` | statement to check for block exit status
  `FuncDeclaration `func`` | function that statement `s` is in
  `ErrorSink `eSink`` | generate an error if it throws

  #### Return Value

  BE.xxxx

- `checkThrow`

  #### Declaration

  `BE `checkThrow`(const ref Loc `loc`, Expression `exp`, FuncDeclaration `func`, ErrorSink `eSink`);`

  Checks whether `throw <`exp`>` throws an `Exception` or an `Error` and raises an error if this violates `nothrow`.

  #### Parameters

  `Loc `loc`` | location of the `throw`
  `Expression `exp`` | expression yielding the throwable
  `ErrorSink `eSink`` | if !`null` then inside of a `nothrow` scope
  `FuncDeclaration `func`` | function containing the `throw`

  #### Return Value

  `BE.[err]throw` depending on the type of ``exp``