Spec-Zone.ru › Ada 2022
Руководство по Ada (Ada 2022)

11.3 Операторы и выражения raise

Оператор raise_statement вызывает исключение.

Синтаксис

raise_statement ::= raise;
| raise exception_name [with string_expression];
raise_expression ::= raise exception_name [with string_simple_expression]
Если raise_expression встречается внутри expression в одном из следующих контекстов, raise_expression должен быть помещён в скобки внутри expression:
object_declaration;
modular_type_definition;
floating_point_definition;
ordinary_fixed_point_definition;
decimal_fixed_point_definition;
default_expression;
ancestor_part.

Правила легальности

Имя exception_name, если оно есть, оператора raise_statement или raise_expression должно обозначать исключение. Оператор raise_statement без имени exception_name (то есть оператор повторного вызова исключения) должен находиться внутри обработчика, но не внутри тела, заключённого этим обработчиком.

Правила разрешения имён

Выражение string_expression или string_simple_expression, если оно есть, оператора raise_statement или raise_expression должно иметь тип String.
Ожидаемый тип для raise_expression должен быть любым типом.

Динамическая семантика

Вызвать исключение — это вызвать новое событие этого исключения, как объясняется в 11.4. Для выполнения оператора raise_statement с именем exception_name вызывается указанное исключение. Аналогично, при вычислении raise_expression вызывается указанное исключение. В обоих этих случаях, если присутствует выражение string_expression или string_simple_expression, оно вычисляется, и его значение ассоциируется с событием исключения. При выполнении оператора повторного вызова исключения повторно вызывается событие исключения, которое вызвало передачу управления в ближайший внешний обработчик.
ПРИМЕЧАНИЕ Если вычисление string_expression или string_simple_expression вызывает исключение, это исключение распространяется вместо исключения, обозначенного именем exception_name оператора raise_statement или raise_expression.

Примеры

Примеры операторов raise:
raise Ada.IO_Exceptions.Name_Error; -- см. A.13
raise Queue_Error with "Очередь заполнена"; -- см. 9.11
raise; -- повторно вызвать текущее исключение
-- Пример выражения raise см. в определениях подсистемы потоков в 13.13.1.


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API