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

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

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

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

Как объяснено в B.1, «Предикаты для взаимодействия», для сущности может быть указана конвенция. Если в этом Международном стандарте не указано иное, по умолчанию конвенция для сущности — Ada. Для вызываемой сущности или типа доступа к подпрограмме конвенция называется конвенцией вызова. Следующие конвенции определены языком:
  • По умолчанию конвенция вызова для любой подпрограммы, не указанной ниже, — Ada. Предикат Convention, Import или Export может быть использован для переопределения конвенции вызова по умолчанию (см. B.1).
  • Конвенция вызова Intrinsic представляет подпрограммы, «встроенные» в компилятор. Конвенция вызова по умолчанию — Intrinsic для следующих случаев:
  • литералы перечисления;
  • оператор "/=", неявно объявленный из-за объявления "=" (см. 6.6);
  • любая другая неявно объявленная подпрограмма, если это не операция диспетчеризации помеченного типа;
  • унаследованная подпрограмма формального помеченного типа с неизвестными дискриминантами;
  • атрибут, являющийся подпрограммой;
  • подпрограмма, объявленная непосредственно внутри protected_body;
  • любой префиксный вид подпрограммы (см. 4.1.3).
    Атрибут Access запрещен для подпрограмм Intrinsic.
  • Конвенция вызова по умолчанию — protected для защищенной подпрограммы и для типа доступа к подпрограмме с ключевым словом protected в её определении.
  • Конвенция вызова по умолчанию — entry для входа.
  • Конвенция вызова для анонимного параметра доступа к подпрограмме или анонимного результата доступа к подпрограмме — protected, если в его определении присутствует ключевое слово protected, и в противном случае — конвенция подпрограммы, содержащей параметр.
  • Если выше не указано как Intrinsic, конвенция вызова для любой унаследованной или переопределяющей операции диспетчеризации помеченного типа — конвенция соответствующей подпрограммы родительского типа. Конвенция вызова по умолчанию для новой операции диспетчеризации помеченного типа — конвенция типа.
Из этих четырёх конвенций только Ada и Intrinsic допускаются в качестве convention_идентификатор в предикате Convention, Import или Export.
Два профиля считаются соответствующими по типу, если они имеют одинаковое количество параметров, и оба имеют результат, если любой из них имеет, и соответствующие типы параметров и результата одинаковы, или, для параметров или результатов доступа, соответствующие обозначенные типы одинаковы, или соответствующие обозначенные профили соответствуют по типу.
Два профиля считаются соответствующими по режиму, если они соответствуют по типу, и соответствующие параметры имеют одинаковые режимы, и, для параметров или результатов доступа, обозначенные подтипы статически совпадают, или обозначенные профили соответствуют по подтипу.
Два профиля считаются соответствующими по подтипу, если они соответствуют по режиму, соответствующие подтипы профиля статически совпадают, и ассоциированные конвенции вызова одинаковы. Профиль формальной подпрограммы обобщения не соответствует по подтипу ни одному другому профилю.
Два профиля считаются полностью соответствующими, если они соответствуют по подтипу, и соответствующие параметры имеют одинаковые имена и имеют default_expressionы, которые полностью соответствуют друг другу.
Два выражения считаются полностью соответствующими, если после замены каждого использования оператора эквивалентным вызовом функции_вызова:
  • каждый составляющий конструкт одного соответствует экземпляру той же синтаксической категории в другом, за исключением того, что расширенное имя может соответствовать прямому_имени (или литералу_символа) или другому расширенному имени в другом; и
  • каждое прямое_имя, литерал_символа и имя_селектора, которое не является частью префикса расширенного имени в одном, обозначает ту же декларацию, что и соответствующее прямое_имя, литерал_символа или имя_селектора в другом; и
  • каждый атрибутный_определяющий_элемент в одном должен быть таким же, как соответствующий атрибутный_определяющий_элемент в другом; и
  • каждая первичная величина, являющаяся литералом в одном, имеет такое же значение, как соответствующий литерал в другом.
Два известных_частей_дискриминантов считаются полностью соответствующими, если они имеют одинаковое количество дискриминантов, и дискриминанты в одних и тех же позициях имеют одинаковые имена, статически соответствующие подтипы и default_expressionы, которые полностью соответствуют друг другу.
Два определения_подтипов_дискретных_величин считаются полностью соответствующими, если они оба являются указание_подтипа или оба являются диапазонами, метки_подтипов (если есть) обозначают тот же подтип, и соответствующие простые_выражения диапазонов (если есть) полностью соответствуют.
Профиль префиксного представления подпрограммы — это профиль, полученный путём пропуска первого параметра этой подпрограммы. Для беспараметрической подпрограммы нет профиля префиксного представления. В целях определения соответствия по подтипу и режиму конвенция профиля префиксного представления считается соответствующей конвенции входа или защищённой операции.

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

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


Spec-Zone.ru

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