Contents Index Previous Next
11.3 Raise Statements
1
[A raise_statement
raises an exception.]
Syntax
2
raise_statement
::= raise [
exception_name];
Legality Rules
3
The
name,
if any, in a
raise_statement shall
denote an exception.
{re-raise statement}
A
raise_statement
with no
exception_name (that
is, a
re-raise statement) shall be within a handler, but not within
a body enclosed by that handler.
Dynamic Semantics
4
{raise (an exception)}
To
raise an exception is to raise a new occurrence
of that exception[, as explained in
11.4].
{execution
(raise_statement with an exception_name) [partial]} For
the execution of a
raise_statement with
an
exception_name, the named exception
is raised.
{execution (re-raise statement) [partial]}
For the execution of a re-raise statement, the exception
occurrence that caused transfer of control to the innermost enclosing handler
is raised [again].
4.a
Implementation Note: For
a re-raise statement, the implementation does not create a new Exception_Occurrence,
but instead propagates the same Exception_Occurrence value. This allows
the original cause of the exception to be determined.
Examples
5
Examples of raise
statements:
6
raise Ada.IO_Exceptions.Name_Error; -- see A.13
7
raise; -- re-raise the current exception
Wording Changes from Ada 83
7.a
The fact that the name
in a raise_statement has to denote
an exception is not clear from RM83. Clearly that was the intent, since
the italicized part of the syntax rules so indicate, but there was no
explicit rule. RM83-1.5(11) doesn't seem to give the italicized parts
of the syntax any force.
Contents Index Previous Next Legal