При компиляции следующей процедуры столкнулся с ошибкой компиляции. Квадратик ошибки, помещённый после WHILE, гласит:
"Not enough registers; simplify expression".
Код:
PROCEDURE (set: StdSet) Contains (rec: ANYPTR): BOOLEAN;
VAR t: Term;
BEGIN
t := set.list.first;
WHILE (t # NIL) & (Services.AdrOf(t(Item).rec^) < Services.AdrOf(rec^)) DO t := t.next END;
RETURN (t # NIL) & (Services.AdrOf(t(Item).rec^) = Services.AdrOf(rec^))
END Contains;
Любопытно. Компилятор не может распределить регистры... А выражение вроде не сложное. (Было SYSTEM.ADR, нормуль, а при копировании модуля отдельно в другую подсистему надо было отвязать от SYSTEM...)
Впрочем, упрощение очевидно и по любому нужно - второй-то адрес инвариантен.