Справочник по Ada (Ada 2022)
8.2 Область действия объявлений
Для каждого объявления правила языка определяют определенный фрагмент текста программы, называемый областью действия объявления. Область действия объявления также называется областью действия любого представления или сущности, объявленной этим объявлением. Внутри области действия сущности, и только там, существуют места, где допустимо обращаться к объявленной сущности. Эти места определяются правилами видимости и перегрузки.
Статическая семантика
Непосредственная область действия объявления — это часть декларативной области, непосредственно окружающая объявление. Непосредственная область действия начинается с начала объявления, за исключением случая объявления, допускающего перегрузку, в этом случае непосредственная область действия начинается сразу после места, где определяется профиль вызываемой сущности (это конец _спецификации для вызываемой сущности или конец generic_instantiation, если это экземпляр). Непосредственная область действия распространяется до конца декларативной области, за исключением следующих случаев:
- Непосредственная область действия library_item включает только его семантические зависимости.
- Непосредственная область действия объявления в частях private библиотечной единицы не включает видимую часть любого публичного потомка этой библиотечной единицы.
Видимая часть (представления) сущности — это часть текста ее объявления, содержащая объявления, видимые снаружи. Частная часть (представления) сущности, имеющей видимую часть, содержит все объявления внутри объявления (представления) сущности, за исключением тех, которые находятся в видимой части; они не видны снаружи. Видимые и частные части определяются только для таких видов сущностей: вызываемые сущности, другие программные модули и составные типы.
- Видимая часть представления вызываемой сущности — это ее профиль.
- Видимая часть составного типа, отличного от типа задачи или защищенного типа, состоит из объявлений всех компонентов, объявленных (явным или неявным образом) внутри type_declaration.
- Видимая часть генерируемого модуля включает generic_formal_part. Для генерируемого пакета она также включает первый список basic_declarative_itemов package_specification. Для генерируемой подпрограммы она также включает профиль.
- Видимая часть пакета, модуля задачи или защищенного модуля состоит из объявлений в объявлении программного модуля, кроме тех, которые следуют за служебным словом private, если таковые имеются; см. 7.1 и 12.7 для пакетов, 9.1 для модулей задач и 9.4 для защищенных модулей.
Область действия объявления всегда содержит непосредственную область действия объявления. Кроме того, для данного объявления, которое находится непосредственно внутри видимой части внешнего объявления или является публичным потомком внешнего объявления, область действия данного объявления простирается до конца области действия внешнего объявления, за исключением того, что область действия library_item включает только его семантические зависимости.
Область действия attribute_definition_clause идентична области действия объявления, которое бы произошло в месте attribute_definition_clause. Область действия aspect_specification идентична области действия связанного объявления.
Непосредственная область действия объявления также является непосредственной областью действия сущности или представления, объявленных этим объявлением. Аналогично, область действия объявления также является областью действия сущности или представления, объявленных этим объявлением.
Непосредственная область действия директивы pragma, которая не используется в качестве конфигурационной директивы, определяется как область, простирающаяся от места сразу после директивы до конца декларативной области, непосредственно окружающей директиву.
ПРИМЕЧАНИЕ Существуют обозначения для обозначения видимых объявлений, которые не непосредственно видны. Например, parameter_specification находятся в видимой части subprogram_declaration, чтобы они могли использоваться в вызовах с именованием, которые появляются за пределами вызываемой подпрограммы. В качестве другого примера, объявления видимой части пакета могут обозначаться расширенными именами, которые появляются за пределами пакета, и могут быть сделаны непосредственно видимыми с помощью use_clause.