Cтраница 4
Система, в которой для задания каждого преобразования используются различные макрокоманды, должна различать возникающие двусмысленные и неопределенные ситуации. Например, может существовать макрокоманда для задания поля изображения, но в общем случае это действие окажется бессмысленным, если оно будет отнесено к любому обращению, кроме самого верхнего в дереве структуры. [46]
Может оказаться, что сам блок try не содержит никаких проверок ошибок и не включает никаких операторов throw, но код, вызываемый из блока try, может, конечно, содержать контроль ошибок, в частности, в конструкторах. Например, код в блоке try может обрабатывать индексирование массива в объекте класса массив, в котором функция-элемент operator [ ] может быть перегружена генерацией исключения, связанного с ошибкой выхода индекса за допустимые пределы. Любое обращение к этой функции может сгенерировать исключение или вызвать другую функцию, которая тоже может сгенерировать исключение. [47]
Расширение области действия имен достигается и заданием списка параметров в подпрограмме. Аргументы, задаваемые при обращении к подпрограмме, известны в вызывающем и вызываемом блоках. Любое обращение к параметру в подпрограмме рассматривается как обращение к соответствующему аргументу. [48]
Чтобы запустить процедуру, соответствующий процесс должен иметь все необходимые возможности, перечисленные в области локальных имен. Поэтому если процесс нуждается в выводе информации в некоторый файл, то прежде всего ему должна быть доступна процедура вывода и, кроме того, объект, на который осуществляется этот вывод. Любое обращение по команде CALL перехватывает операционная система, пытаясь определить, соответствуют ли аргументы, передаваемые вызывающей процедурой, параметрическому шаблону вызываемой. Вызывающая процедура должна предъявлять не меньшие полномочия, чем этого требует вызываемая процедура. Таким образом, если у процесса появилась потребность в выводе информации на определенный объект, то процедуре записи следует послать запрос на обработку данного объекта с указанием полномочий процесса по отношению к адресуемому объекту. В том случае, когда предъявляемые и ожидаемые полномочия не согласуются, в ответ на обращение CALL выдается отказ. При согласовании полномочий для вызываемой процедуры формируется своя область локальных имен. Возможности, перечисленные в этой области, могут в принципе превышать возможности вызывающей процедуры, но эти более широкие возможности никак не связаны с последней, поскольку все ее полномочия указаны в соответствующей ей области локальных имен. [49]