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

11.4.2 Директивы Assert и Assertion_Policy

Директива Assert используется для проверки истинности логического выражения в любой точке последовательности объявлений или операторов. Директива Assertion_Policy используется для управления тем, будут ли такие проверки игнорироваться реализацией, проверяться во время выполнения или обрабатываться каким-либо образом, определённым реализацией.

Синтаксис

Форма директивы pragma Assert имеет следующий вид:
pragma Assert([Check =>] boolean_выражение[, [Message =>] string_выражение]);
Директива pragma Assert допускается в местах, где разрешено использовать declarative_item или statement.
Форма директивы pragma Assertion_Policy имеет следующий вид:
pragma Assertion_Policy(policy_идентификатор);
Директива pragma Assertion_Policy является конфигурационной директивой.

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

Ожидаемый тип для boolean_выражения директивы pragma Assert — любой булевый тип. Ожидаемый тип для string_выражения директивы pragma Assert — тип String.

Правила допустимости

policy_идентификатор директивы pragma Assertion_Policy должен быть либо Check, Ignore, либо определённой реализацией идентификатор.

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

Директива pragma Assertion_Policy — это конфигурационная директива, которая задаёт политику утверждений, действующую для единиц компиляции, к которым она применяется. Разные политики могут применяться к различным единицам компиляции в пределах одной и той же раздела. По умолчанию политика утверждений определяется реализацией.
Существует следующий определённый языком пакет библиотеки:
package Ada.Assertions is
pragma Pure(Assertions);
Assertion_Error : exception;
procedure Assert(Check : in Boolean);
procedure Assert(Check : in Boolean; Message : in String);
end Ada.Assertions;
Единица компиляции, содержащая директиву pragma Assert, имеет семантическую зависимость от библиотечной единицы Assertions.
Политика утверждений, которая применяется к обобщённой единице, также применяется ко всем её экземплярам.

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

Политика утверждений определяет, как реализация интерпретирует директиву pragma Assert. Если политика утверждений — Ignore в момент директивы pragma Assert, то директива игнорируется. Если политика утверждений — Check в момент директивы pragma Assert, то обработка директивы заключается в вычислении булевого выражения, и если результат — False, то вычисляется аргумент Message, если он есть, и возбуждается исключение Assertions.Assertion_Error с сообщением, если аргумент Message предоставлен.
Вызов процедуры Assertions.Assert без параметра Message эквивалентен:
if Check = False then
raise Ada.Assertions.Assertion_Error;
end if;
Вызов процедуры Assertions.Assert с параметром Message эквивалентен:
if Check = False then
raise Ada.Assertions.Assertion_Error with Message;
end if;
Проведение процедур Assertions.Assert имеет эти последствия независимо от действующей политики утверждений.

Разрешения для реализации

Assertion_Error может быть объявлено путём переименования исключения, определённого реализацией, из другого пакета.
Реализации могут определять свои собственные политики утверждений.
ПРИМЕЧАНИЯ
2 Обычно булевое выражение в директиве pragma Assert не должно вызывать функции с существенными побочными эффектами, когда результат выражения — True, чтобы действующая политика утверждений не влияла на нормальную работу программы.


Spec-Zone.ru

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