OberonCore
https://forum.oberoncore.ru/

Расширенная совместимость массивов указателей по IN
https://forum.oberoncore.ru/viewtopic.php?f=29&t=5908
Страница 1 из 1

Автор:  Илья Ермаков [ Среда, 05 Октябрь, 2016 06:17 ]
Заголовок сообщения:  Расширенная совместимость массивов указателей по IN

Случайно наткнулся на возможность передавать параметру IN arr: ARRAY OF BaseRecType фактический массив ARRAY OF ExtensionOf(BaseRecType).

Как частный случай, IN arr: ARRAY OF ANYPTR может принимать массивы любых указателей на записи.

В описании языка нигде не нашёл об этом.

Примеры:

Код:
   PROCEDURE Test*;
      VAR arr: ARRAY 256 OF POINTER TO RECORD x: INTEGER END;
      
      PROCEDURE Proc (IN arr: ARRAY OF ANYPTR);
      BEGIN
      
      END Proc;
   
   BEGIN
      Proc(arr)
   END Test;

   PROCEDURE Test2*;
      TYPE
         T = POINTER TO EXTENSIBLE RECORD END;
         TEx = POINTER TO RECORD (T) END;
   
      VAR arr: ARRAY 256 OF TEx;
      
      PROCEDURE Proc (IN arr: ARRAY OF T);
      BEGIN
      
      END Proc;
   
   BEGIN
      Proc(arr)
   END Test2;

Автор:  Info21 [ Среда, 05 Октябрь, 2016 08:31 ]
Заголовок сообщения:  Re: Расширенная совместимость массивов указателей по IN

Словесная формулировка неправильная. Разве в примере речь не об указателях?

Что странного при такой работе с указателями?
Правила совместимости в Сообщении есть (одно из приложений).
Вы проверяли с пальцем по тексту?

Автор:  Илья Ермаков [ Среда, 05 Октябрь, 2016 11:07 ]
Заголовок сообщения:  Re: Расширенная совместимость массивов указателей по IN

Ничего странного, это, в принципе, логично.

(Очевидно, конечно, что это действует только для IN-параметров).

Однако в описании этого всё же, видимо, нет.

Вопросы совместимости параметров - открытых массивов регулируются вот этим:
Цитата:
Совместимость по массивам [Array compatible]
Фактический параметр a типа Ta является совместимым по массивам с формальным параметром f типа Tf, если
1. Tf и Ta — эквивалентны, или
2. Tf — открытый массив, Ta — произвольный массив, и типы их элементов совместимы по массивам, или
3. Tf — открытый массив CHAR, и Ta имеет тип String, или
4. Tf — открытый массив SHORTCHAR, и Ta имеет тип Shortstring.


Таким образом, либо массив многомерный - и уходим на 2, либо в итоге терминальное правило 1, где речь об эквивалентности.
(3, 4 - не наш случай).

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/