Look into any carpenter's tool-bag and see how many different hammers, chisels, planes and screw-drivers he keeps there--not for ostentation or luxury, but for different sorts of jobs. --Robert Graves and Alan Hodge
Executing a statement produces a computation that can halt (normal outcome), raise an exception, cause a checked runtime error, or loop forever. If the outcome is an exception, it can optionally be paired with an argument.
We define the semantics of
RETURN with exceptions
called the exit-exception and the return-exception. The
exit-exception takes no argument; the return-exception takes an argument of
arbitrary type. Programs cannot name these exceptions explicitly.
Implementations should speed up normal outcomes at the expense of exceptions (except for the return-exception and exit-exception). Expending a thousand instructions per exception raised to save one instruction per procedure call would be reasonable.
If an expression is evaluated as part of the execution of a statement, and the evaluation raises an exception, then the exception becomes the outcome of the statement.
The empty statement is a no-op. In this report, empty statements are written