Представление типов данных
 

Почти все части компилятора имеют дело с типами данных так или иначе. Символы заботятся о типах данных больше всего, это - то, на чем основывается большинство проверок типа во время компиляции. У узлов AST также есть типы данных, которые заботятся о выражениях (включая преобразования\конвертацию).

Тип данных представлен как комбинация:

    • dtype Integer
      • 5 бит: raw тип:
        • void (неизвестный тип, например: any ptr, type t as t)
        • byte, ubyte
        • char (zstring указатели и их DEREF выражения)
        • short, ushort
        • wchar (wstring указатели и их DEREF выражения)
        • integer, uinteger
        • enum (integer)
        • bitfield (uinteger)
        • long, ulong
        • longint, ulongint
        • single, double
        • string (переменной длины)
        • fixstr (Строки фиксированной длины, string*N, N является длиной данного типа)
        • struct (UDT, -> подтип используемый)
        • namespace (использование во время искажение имени?)
        • function (используется для указателей на функции, -> подтип содержит полную декларацию функции)
        • Опережающая ссылка (будет изменен фактически на raw тип, когда известен, -> подтип используемый)
        • pointer (это значение используется только временно, как в результате макроса typeGet ())
        • xmmword (Используемый SSE излучатель)
      • 4 бит: PTR подсчет
Сколько PTR там на тип, максимально 8. Если > 0, то тип данных - указатель.
      • 9 бит: CONST маска (8 PTR's + 1 "base")
    Пример                     CONST маска

const integer                   000000001           (первый CONST бит установлен)
integer const ptr               000000001           (то же самое)
const integer ptr               000000010           (указатель на const)
const integer ptr const ptr     000000101           (const указатель на указатель на const)
    • подтип, который для некоторых типов указывает на символ:
      • Для типов UDT (структуры/классы, перечисления) это указывает на соответствующий символ UDT
      • Для будущих ссылок на определения типов это указывает на специальный символ будущих ссылок, который будет в конечном счете заменен фактическим символом подтипа, когда он будет известен.
      • Для указателей процедуры это указывает на анонимный символ, далее определяющий соглашение о вызовах и т.д. и самое главное типы результата и параметров.
    • length integer
Это используется в местах для расчета размеров (например, расчеты размера структуры, арифметические операции над указателями, смещения стека)​​.