Spec-Zone.ru › Ada 2005
Справочник Ada 2005

8.5.1 Объявления переименования объектов

Объявление object_renaming_declaration используется для переименования объекта.

Синтаксис

object_renaming_declaration ::=
defining_identifier : [null_exclusion] subtype_mark renames object_name;
| defining_identifier : access_definition renames object_name;

Правила разрешения имен

Тип object_name должен соответствовать типу, определяемому subtype_mark, или, в случае, когда тип определяется access_definition, анонимному типу доступа. Если анонимный тип доступа является типом доступа к объекту, тип object_name должен иметь тот же тип назначения, что и access_definition. Если анонимный тип доступа является типом доступа к подпрограмме, тип object_name должен иметь согласованный с типом access_definition профиль назначения.

Правила легальности

Переименовываемый элемент должен быть объектом.
В случае, когда тип определяется access_definition, тип переименованного объекта и тип, определенный access_definition:
  • должны оба быть типами доступа к объектам со статически совпадающими назначенными подтипами и оба либо являются, либо не являются типами доступа к константам; или
  • должны оба быть типами доступа к подпрограммам с совместимыми подтипами назначенных профилей.
Для объявления object_renaming_declaration с null_exclusion или access_definition, имеющим null_exclusion:
  • если object_name обозначает формальный объект-генерик для генерической единицы G, и object_renaming_declaration встречается в теле G или в теле генерической единицы, объявленной в области описания G, то объявление формального объекта G должно содержать null_exclusion;
  • в противном случае, подтип object_name должен исключать null. В дополнение к местам, где обычно применяются правила легальности (см. 12.3), это правило применяется также в частях с приватными данными экземпляра генерической единицы.
Переименовываемый элемент не должен быть подкомпонентом, зависящим от дискриминантов переменной, номинальный подтип которой не ограничен, если этот подтип неопределен или переменная ограничена своим начальным значением. Срез массива не должен быть переименован, если это ограничение запрещает переименование массива. В дополнение к местам, где обычно применяются правила легальности, эти правила также применяются в приватной части экземпляра генерической единицы. Эти правила также применяются для переименования, появляющегося в теле генерической единицы, с дополнительным требованием, что даже если номинальный подтип переменной неопределен, его тип не должен быть потомком неопределенного генерического формального типа, измененного типа.

Статическая семантика

Объявление object_renaming_declaration объявляет новый вид переименованного объекта, свойства которого идентичны свойствам переименованного вида. Таким образом, свойства переименованного объекта не изменяются объявлением переименования renaming_declaration. В частности, его значение и является ли он константой не изменяются; аналогично, исключение null или ограничения, применимые к объекту, не изменяются переименованием (любое ограничение, подразумеваемое subtype_mark или access_definition объявления object_renaming_declaration, игнорируется).

Примеры

Пример переименования объекта:
declare
L : Person renames Leftmost_Person; -- см. 3.10.1
begin
L.Age := L.Age + 1;
end;


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API