11.7. ПОДАВЛЕНИЕ ПРОВЕРОК

Присутствие прагмы SUPPRESS позволяет реализации опускать некоторые проверки во время выполнения программы. Эта прагма имеет следующий вид:

pragma SUPPRESS (идентификатор [, [ON =>] имя]);-

Проверка, указанная идентификатором, может быть опущена. Имя (если оно присутствует) должно быть простым или расширенным и обозначать объект, тип или подтип, задачный модуль или настраиваемый модуль; оно также может быть именем подпрограммы, в этом случае имя обозначает все видимые совмещенные подпрограммы.

Прагма SUPPRESS допустима непосредственно в разделе описаний или непосредственно в спецификации пакета. Во втором случае допустимо представление прагмы только с именем, которое обозначает понятие (или несколько совмещенных подпрограмм), описанное непосредственно в спецификации пакета. Действие прагмы распространяется от местоположения прагмы до конца зоны описания, связанной с самым внутренним объемлющим оператором блока или программным модулем. Если прагма задана в спецификации пакета, то ее действие распространяется до конца области действия именованного понятия.

Если в прагму включено имя, то возможность подавления проверки в дальнейшем ограничена: прагма действует только для операций над объектом с этим именем или над всеми объектами базового типа для указанного в прагме имени типа или подтипа, для вызовов подпрограмм с этим именем, для активизации задач указанного именем задачного типа и для конкретизации указанного настраиваемого модуля.

Следующие проверки соответствуют ситуациям, в которых может быть возбуждено исключение CONSTRAINT_ERROR. В этих проверках имя (если оно указано) должно обозначать объект или тип

ACCESS_CHECK

Проверяется именуемая компонента, индексируемая компонента, отрезок или атрибут объекта, указанный ссылочным значением на неравенство значению null этого ссылочного значения.

DISCRIMINANT_CHECK

Проверяется, что дискриминант составного значения удовлетворяет ограничению дискриминанта. Также при ссылке на компоненты записи проверяется их существование для текущих значений дискриминанта.

INDEX_CHECK

Проверяется, что границы значений индексов массива равны соответствующим границам ограничения индекса. Также при ссылке на компоненту массива по каждой размерности проверяется, что данное значение индекса находится в диапазоне, определенном границами индекса массива; при ссылке на отрезок массива проверяется, что заданный дискретный диапазон совместим с диапазоном, определенным границами индексов массива.

LENGTH_CHECK

Проверяется, что каждой компоненте массива соответствует подходящая компонента при выполнении присваивания массиву, преобразовании типа и выполнении логических операций над массивами логических компонент.

RANGE_CHECK

Проверяется, что некоторое значение удовлетворяет ограничению диапазона. Также при предвыполнении указания подтипа проверяется совместимость ограничения (если оно имеется) с обозначением типа. Для агрегата проверяется принадлежность индекса или дискриминанта соответствующему подтипу. Наконец, осуществляются проверки любых ограничений, создаваемых при конкретизации настройки.

Следующие проверки соответствуют ситуациям, в которых возбуждается исключение NUMERIC_ERROR. Допустимыми именами в соответствующих прагмах являются имена числовых типов.

DIVISION_CHECK

Проверяется, что второй операнд операций /, rem и mod не равен нулю.

OVERFLOW_CHECK

Проверяется, что в результате выполнения числовой операции не возникает переполнения.

Следующие проверки соответствуют ситуациям, в которых возбуждается исключение PROGRAM - ERROR. Допустимыми именами в соответствующих прагмах являются имена задач-ных модулей, настраиваемых модулей или подпрограмм.

ELABORATION_CHECK

Когда вызывается подпрограмма, выполняется активизация задачи или предвыполняется конкретизация настройки, то проверяется, что тело соответствующего программного модуля уже предвыполнено.

Следующие проверки соответствуют ситуациям, в которых возбуждается исключение STORAGE_ERROR. Допустимыми именами в соответствующих прагмах являются имена, обозначающие ссылочные типы. задачные модули или полпппгпяммм

STORAGE_ERROR

Проверяется, что выполнение генератора не потребует объема памяти, большего, чем необходимо для выбора, или что требуемый под задачу или для подпрограммы объем памяти достаточен.

Если возникает ошибочная ситуация в отсутствие проверок во время выполнения программы, то программа считается ошибочной (результаты выполнения не определяются в языке).

Примеры:

pragma SUPPRESS (RANGE_CHECK);

pragma SUPPRESS (INDEX_CHECK, ON => TABLE);

Примечание. Для некоторых реализации может оказаться невозможным или слишком дорогим подавление некоторых проверок, тогда соответствующая прагма SUPPRESS может быть проигнорирована. Следовательно, наличие такой прагмы внутри данного модуля не гарантирует, что соответствующее исключение не будет возбуждено; эти исключения также могут распространяться вызванными модулями.

;i Ссылки: агрегат 4.3, активизация 9.3, атрибут 4.1.4, вызов подпрограмм????? |4.8, дискретный диапазон 3.6, дискриминант 3.7.1, задача 9, задачный модуль 9, задачный тип 1'9.1, идентификатор 2.3, именуемый тип 3.7, индекс 3.6, индексируемая компонента 4.1.1, исключение CONSTRAINT_ERROR 11.1, исключение NUMERIC_ERROR 11.1, исключение PROGRAM_ERROR 11.1, компонента записи 3.7, компонента массива 3.6, конкретизация наст-ройки 12.3, массив 3.6, набор 3.8, настраиваемое тело 11.1, настраиваемый модуль 12, обозначение 3.8, обозначение типа 3.3.2, объект 3.2, ограничение 3.3, ограничение диапазона 3.5, ограничение дискриминанта 3.7.2, ограничение индекса 3.6.1, оператор блока 5.6, операция 3.3.3, отрезок 4.1.2, ошибочная ситуация 11, ошибочный 1.6, предвыполнение 3.1, 3.9, подпрограмма 6, подтип 3.3, прагма 2.8, программный модуль 6, простое имя 4.1, раздел описаний 3.9, размерность 3.6, распространение исключения 11.4, расширенное имя 4.1.3, совместимый 3.3.2, составной тип 3.3, спецификация пакета 7.1, ссылочное значение 3.8, ссылочный тип 3.8, субмодуль 10.2, тело задачи 9.1, тело пакета 7.1, тело подпрограммы 6.3, тип 3.3, числовая операция 3.5.5, 3.5.8, 3.5.10, числовой тип 3.5.