Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.


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

Source blockexit.d

enum BE: int;
BE stands for BlockExit.
It indicates if a statement does transfer control to another block. A block is a sequence of statements enclosed in { }
int blockExit(Statement s, FuncDeclaration func, ErrorSink eSink);
Determine mask of ways that a statement can exit.
Only valid after semantic analysis.
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
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.
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
BE.[err]throw depending on the type of exp