Справочник Ada 2005
6.4.1 Ассоциации параметров
Ассоциация параметров определяет связь между фактическим параметром и формальным параметром.
Правила разрешения имен
формальный_параметр_имя_селектора ассоциации параметров должен указывать на спецификацию_параметра вызываемого представления.
Фактический параметр представляет собой либо явный_фактический_параметр, указанный в ассоциации параметров для данного формального параметра, либо соответствующее выражение_по_умолчанию, если для формального параметра не указана ассоциация параметров. Ожидаемый тип фактического параметра — это тип соответствующего формального параметра.
Если режим — in, фактический параметр интерпретируется как выражение; в противном случае фактический параметр интерпретируется только как имя, если возможно.
Правила легитимности
Если режим — in out или out, фактический параметр должен быть именем, обозначающим переменную.
Тип фактического параметра, связанного с параметром доступа, должен быть преобразуем (см. 4.6) к его анонимному типу доступа.
Динамическая семантика
Для вычисления ассоциации параметров:
- Фактический параметр сначала вычисляется.
- Для параметра доступа определение_доступа разрабатывается, что создает анонимный тип доступа.
- Для параметра (любого режима), передаваемого по ссылке (см. 6.2), выполняется преобразование фактического параметра к номинальному типу подтипа формального параметра, и формальный параметр обозначает это преобразование.
- Для параметра in или in out, передаваемого по значению (см. 6.2), объект формального параметра создаётся, и значение фактического параметра преобразуется к номинальному типу подтипа формального параметра и присваивается формальному параметру.
- Для параметра out, передаваемого по значению, объект формального параметра создаётся, и:
- Для типа доступа формальный параметр инициализируется из значения фактического, без проверки ограничения;
- Для составного типа с дискриминантами или имеющего неявные начальные значения для любых подкомпонентов (см. 3.3.1), поведение аналогично параметру in out, передаваемому по значению.
- Для любого другого типа формальный параметр не инициализирован. Если составной, выполняется преобразование фактического параметра к номинальному типу подтипа формального (что может вызвать Constraint_Error), и фактический подтип формального задаётся преобразованием вида. Если элементарный, фактический подтип формального задается его номинальным подтипом.
Формальный параметр с режимом in out или out с дискриминантами ограничен, если ограничен либо его номинальный подтип, либо фактический параметр.
После нормального завершения и выхода из подпрограммы для каждого параметра in out или out, передаваемого по значению, значение формального параметра преобразуется в подтип переменной, указанной в качестве фактического параметра, и присваивается ей. Эти преобразования и присваивания происходят в произвольном порядке.