Ну как побочный... там целая специальная ветка для этого яичка, хоть и не сложная:
Код:
ELSIF (x.class = Nconst) & (f = String8) & (p.typ.form = Int32) & (x.conval.intval2 <= 5) THEN
i := 0; n := 0;
WHILE i < x.conval.intval2 - 1 DO n := 256 * n + ORD(x.conval.ext[i]); INC(i) END;
x := NewIntConst(n)
ELSIF
Полезность не могу понять этой фичи. Тем более что сформировать осмысленную строку-константу с значениями байтов меньше пробела - невозможно жеж в синтаксисе...
Илья Ермаков писал(а):
VAL - трактовать последовательность байт как другой тип.
Как раз про
последовательность байт там не указано, хотя именно так и сделано в большинстве случаев; но как видно во фрагменте, в случае со строкой-константой реализовано по-другому, и результат эквивалентен "последовательности байт" big-endian: первый байт становится старшим. Т.е. тут некая "человеческая запись" интерпретируется: в строке сначала идут самые весомые циферки.
И, кстати, передать строку длиннее 4 литер, или с не-аски литерами - ошибка компиляции. Как ни крути, выделяют этот особый случай; другие строковые литералы VAL не принимает (кроме случаев java, но в этом я не разобрался).