К дескриптируемым типам в ББ относятся записи, массивы, указатели на записи, указатели на массивы, и процедурные типы; я их все перечислил выше.> -- Илья Ермаков писал(а):
> Получается, что SYSTEM.TYP всегда даёт именно дескриптор записевого типа, при обращении к указательному разыменовывая его до .base[0].Если для TYPE T = POINTER TO ARRAY OF RECORD ... END работает взятие SYSTEM.ADR(T^) и оно эквивалентно SYSTEM.TYP, то последний и правда избыточен. А иначе - важен (потому что тогда статически не получить тип именно записи для таких случаев, а на практике нужен именно он постоянно).
Поправлю: .base[.level]

Обе процедуры работают с именами типов => анонимный тип невозможно им передать. Запись T^ формально некорректна (разыменование неприменимо к именам типов), хотя мы, человеки, легко догадываемся, что имеется в виду. Для записи в приведенном вами примере не подойдет ни .ADR, ни .TYP.

А вот такой текст приводит к аварии в компиляторе - как раз там, где ожидается имя базового типа, а, поскольку тип безымянный, приходится разыменовывать NIL.
TYPE T = POINTER TO ARRAY OF RECORD END;
tag := SYSTEM.TYP(T);

В случае TYPE T = POINTER TO RECORD END компилятор принудительно назначает безымянному типу RECORD END имя, если не ошибаюсь T^, поэтому там, где имя базового типа ожидается, оно находится, и аварии не происходит.

Если я вас правильно понял, именно для случая указателя на безымянную запись, вы полагаете, стоит иметь SYSTEM.TYP?