Spec-Zone.ru › Ada 2012
Справочник Ada 2012

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

Оператор raise_statement поднимает исключение.

Синтаксис

raise_statement ::= raise;
| raise имя_исключения_name [with строковое_выражение_expression];
raise_expression ::= raise имя_исключения_name [with строковое_простое_выражение_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.

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

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

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

Выражение строковое_выражение_expression или строковое_простое_выражение_simple_expression, если оно есть, в операторе raise_statement или выражении raise_expression должно иметь тип String.
Ожидаемый тип для raise_expression — любой единственный тип.

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

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

Примеры

Примеры операторов raise:
raise Ada.IO_Exceptions.Name_Error; -- см. A.13
raise Queue_Error with "Буфер полон"; -- см. 9.11
raise; -- повторное поднятие текущего исключения


Spec-Zone.ru

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