Коллеги, я обнаружил, почитывая DevCPT, что атрибуты записей и процедур ABSTRACT LIMITED EXTENDED компилятор позволяет переопределить, как и прочие предопределенные имена типа BITS, LEN, INTEGER и т.п.
Однако Language Report однозначно относит их к непереопределимым ключевым словам: 5. Operators and delimiters are the special characters, character pairs, or reserved words listed below. The reserved words consist exclusively of capital letters and cannot be used as identifiers.
+ := ABSTRACT EXTENSIBLE POINTER - ^ ARRAY FOR PROCEDURE * = BEGIN IF RECORD / # BY IMPORT REPEAT ~ < CASE IN RETURN & > CLOSE IS THEN . <= CONST LIMITED TO , >= DIV LOOP TYPE ; .. DO MOD UNTIL | : ELSE MODULE VAR $ ELSIF NIL WHILE ( ) EMPTY OF WITH [ ] END OR { } EXIT OUT
Я попробовал - действительно, позволяет MODULE M; CONST ABSTRACT = -1; TYPE T = ABSTRACT(*err: identifier does not denote a type*) RECORD END; END MM.
При этом NEW - не в списке из п. 5!
Что думаете? Это баг или фича? Для "реализации" такой особенности в таблице символов введен отдельный режим объекта, а всего-то их существует 4 штуки - по одной для каждого атрибута.
|