Background Image
Previous Page  13 / 22 Next Page
Information
Show Menu
Previous Page 13 / 22 Next Page
Page Background

если

M

i

— регион элемента массива, то в резюме сохраняется

символьное значение индекса, а результат актуализации — эле-

мент массива от региона, полученного на

(

i

1)

-м шаге алгорит-

ма, с символьным значением индекса, определенным в результа-

те актуализации сохраненного значения индекса;

если

M

i

— регион поля структуры, то в резюме сохраняется

объявление поля структуры, а результат актуализации — поле

структуры от региона, полученного на

(

i

1)

-м шаге алгоритма,

с тем же определением;

если

M

i

— регион данных базового класса, то в резюме сохра-

няется ссылка на определение базового класса, а результат ак-

туализации — подрегион данных базового класса от региона,

полученного на

(

i

1)

-м шаге, с тем же определением.

Цепочка родительских регионов может строиться как явно — при

построении резюме для региона памяти, так и неявно — при сохра-

нении и последующем разборе символьного значения, для которого

строится резюме.

Применение резюме проверяющими модулями.

Схемы примене-

ния резюме, описанные выше, затрагивают отсечение недостижимых

ветвей выполнения программы и уточнение множества конкретных

значений для символьных значений. Однако для того, чтобы анали-

затор имел возможность выполнять проверки при вложенном вызове

функции, необходима доработка проверяющих модулей. Для получе-

ния проверяющими модулями возможностей анализа при использова-

нии резюме введем две дополнительных функции обратного вызова.

Первая (evalSummaryPopulate) вызывается для сбора резюме прове-

ряющим модулем, вторая (evalSummaryApply) — при применении ре-

зюме.

Проверяющий модуль, имеющий возможность выполнения дей-

ствий при событии SummaryPopulate, должен сохранить информацию,

которая может понадобиться для обновления состояния или выпол-

нения отложенной проверки. Информация, содержащаяся в резюме,

не освобождается до окончания работы анализатора, поэтому прове-

ряющий модуль может использовать произвольный формат хранения

данных, лучшим образом отвечающий задаче проверки. Как показала

практика модификации проверяющих модулей, для каждой провер-

ки, проводимой модулем, в GDM обычно помещается две дополни-

тельных записи, которые затем используются для заполнения резюме:

для обновления состояния и отложенной проверки. В качестве приме-

ра рассмотрим проверку двойного закрытия файлового дескриптора.

В резюме помещаются две секции: первая отвечает за обновление

состояния дескриптора (является ли он открытым или закрытым), а

вторая — за выполнение отложенной проверки (в ней запоминаются

ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. “Приборостроение”. 2015. № 5 87