Справочник Ada 2012
11.3 Операторы raise и выражения raise
Оператор raise_statement поднимает исключение.
Синтаксис
Если выражение raise_expression встречается внутри выражения expression в одном из следующих контекстов, выражение raise_expression должно быть заключено в скобки внутри выражения expression:
Правила легальности
Идентификатор имя_исключения_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; -- повторное поднятие текущего исключения