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

6.3.1 Правила соответствия

Если профили подпрограмм указаны более чем в одном месте, они должны соответствовать одному из четырёх способов: соответствию по типу, соответствию по режиму, соответствию по подтипу или полному соответствию.

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

Как поясняется в B.1, «Прагмы взаимодействия», для сущности может быть указана конвенция. Если этот международный стандарт не указывает иного, по умолчанию конвенция сущности — Ada. Для вызываемой сущности или типа доступа к подпрограмме конвенция называется конвенцией вызова. Язык определяет следующие конвенции:
  • По умолчанию конвенцией вызова для любой подпрограммы, не перечисленной ниже, является Ada. Прагма Convention, Import или Export может быть использована для переопределения конвенции вызова по умолчанию (см. B.1).
  • Конвенция вызова Intrinsic представляет подпрограммы, которые «встроены» в компилятор. По умолчанию конвенция вызова Intrinsic применяется для следующего:
  • литералы перечислений;
  • оператор "/=", неявно объявленный из-за объявления "=" (см. 6.6);
  • любая другая неявно объявленная подпрограмма, если это не операция диспетчеризации помеченного типа;
  • унаследованная подпрограмма формального помеченного типа с неизвестными дискриминантами;
  • атрибут, являющийся подпрограммой;
  • подпрограмма, объявленная непосредственно внутри protected_body.
    Атрибут Access не разрешен для подпрограмм Intrinsic.
  • Конвенция вызова по умолчанию — protected для защищенной подпрограммы и для типа доступа к подпрограмме со служебным словом protected в её определении.
  • Конвенция вызова по умолчанию — entry для входа.
  • Если выше не указано как Intrinsic, конвенция вызова для любой унаследованной или переопределяющей операции диспетчеризации помеченного типа — такая же, как у соответствующей подпрограммы родительского типа. По умолчанию конвенция вызова новой операции диспетчеризации помеченного типа — конвенция типа.
Из этих четырёх конвенций только Ada и Intrinsic разрешены в качестве convention_identifier в прагме Convention, Import или Export.
Два профиля соответствуют по типу, если они имеют одинаковое количество параметров, и оба имеют результат, если хотя бы один из них имеет, и соответствующие типы параметров и результата одинаковы, или, для параметров доступа, соответствующие назначенные типы одинаковы.
Два профиля соответствуют по режиму, если они соответствуют по типу, и соответствующие параметры имеют идентичные режимы, и, для параметров доступа, назначенные подтипы статически совпадают.
Два профиля соответствуют по подтипу, если они соответствуют по режиму, соответствующие подтипы профиля статически совпадают, и связанные конвенции вызова одинаковы. Профиль формальной подпрограммы обобщённого типа не соответствует по подтипу никакому другому профилю.
Два профиля полностью соответствуют, если они соответствуют по подтипу, и соответствующие параметры имеют одинаковые имена и имеют default_expressionы, которые полностью соответствуют друг другу.
Два выражения полностью соответствуют, если после замены каждого использования оператора эквивалентным вызовом function_call:
  • каждый составной конструкт одного соответствует экземпляру той же синтаксической категории в другом, за исключением того, что расширенное имя может соответствовать direct_name (или character_literal) или другому расширенному имени в другом; и
  • каждое direct_name, character_literal и selector_name, которые не являются частью prefix расширенного имени в одном, обозначают ту же декларацию, что и соответствующее direct_name, character_literal или selector_name в другом; и
  • каждый attribute_designator в одном должен быть таким же, как соответствующий attribute_designator в другом; и
  • каждая primary, которая является литералом в одном, имеет такое же значение, как соответствующий литерал в другом.
Два known_discriminant_partа полностью соответствуют, если они имеют одинаковое количество дискриминант, и дискриминанты в одинаковых позициях имеют одинаковые имена, статически совпадающие подтипы и default_expressionы, которые полностью соответствуют друг другу.
Два discrete_subtype_definitionа полностью соответствуют, если оба являются subtype_indicationами или оба являются rangeами, subtype_markами (если таковые имеются) обозначают тот же подтип, и соответствующие simple_expressionы rangeов (если таковые имеются) полностью соответствуют.

Разрешения для реализации

Реализация может объявить оператор, объявленный в библиотечном модуле, определённом языком, как intrinsic.


Spec-Zone.ru

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