Справочник по Ada 2012
8.5.1 Объявления переименования объектов
Объявление object_renaming_declaration используется для переименования объекта.
Синтаксис
object_renaming_declaration ::=
defining_identifier : [null_exclusion] subtype_mark renames object_name
[aspect_specification];
| defining_identifier : access_definition renames object_name
[aspect_specification];
defining_identifier : [null_exclusion] subtype_mark renames object_name
[aspect_specification];
| defining_identifier : access_definition renames object_name
[aspect_specification];
Правила разрешения имён
Тип object_name должен соответствовать типу, определённому subtype_mark, или, в случае, если тип определён access_definition, анонимному типу доступа. Если анонимный тип доступа — тип доступа к объекту, тип object_name должен иметь тот же тип-назначение, что и access_definition. Если анонимный тип доступа — тип доступа к подпрограмме, тип object_name должен иметь профиль назначения, который соответствует типу профиля access_definition.
Правила допустимости
Переименовываемый элемент должен быть объектом.
В случае, когда тип определён access_definition, тип переименовываемого объекта и тип, определённый access_definition:
- должны быть типами доступа к объекту с статически совпадающими типами назначения и с тем же или без статуса доступа к константе; или
- должны быть типами доступа к подпрограмме с совместимыми типами профилей назначения.
- если object_name обозначает формальный объект обобщённого блока G, и object_renaming_declaration встречается в теле G или в теле обобщённого блока, объявленного в области объявления G, то объявление формального объекта G должно иметь null_exclusion;
- иначе тип object_name должен исключать null. В дополнение к местам, где обычно применяются правила допустимости (см. 12.3), это правило применяется также в частях «private» экземпляра обобщённого блока.
Переименовываемый элемент не должен быть подкомпонентом, зависящим от дискриминантов объекта, номинальный тип которого не ограничен, если объект не известен как ограниченный. Срезы массива не должны быть переименованы, если это ограничение запрещает переименование массива. В дополнение к местам, где обычно применяются правила допустимости, эти правила применяются также в частях «private» экземпляра обобщённого блока.
Статическая семантика
Объявление object_renaming_declaration объявляет новый вид переименовываемого объекта, свойства которого идентичны свойствам переименованного вида. Таким образом, свойства переименовываемого объекта не изменяются объявлением renaming_declaration. В частности, его значение и является ли он константой не изменяются; аналогично, исключение null или ограничения, применимые к объекту, не изменяются переименованием (любое ограничение, подразумеваемое subtype_mark или access_definition объявления object_renaming_declaration игнорируется).
Примеры
Пример переименования объекта: