Кстати, раз уж пошли диапазоны и перечисления, то навернео будут и диапазоны перечислений?
Думал об этом, но усложнять компилятор пока не хочется, может быть в дальнейшем.
Так как целые числа можно представить как перечисление, то логично что диапазоны целых чисел будут диапазонами перечисления INTEGER:
TYPE X = RANGE 1..9;
Days = ENUM
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
END;
TYPE WorkDays = RANGE Monday..Friday;
Элементы перечисления должны быть квалифицированы именем типа
Т.е. нельзя использовать просто Monday, нужно Days.Monday
Сейчас тип элементов перечислений совпадает с типом целочисленных констант. Перечисления, по-сути, и есть целочисленные константы, заключенные в собственное пространство имен.
Можно, конечно, несколько расширить и создавать типизированные перечисления, например
lowerchars = RANGE OF CHAR 'a'..'z';
smallnum = RANGE OF SMALLINT 1..9;
longnum = RANGE OF LONGINT 1..9;
или как-то
longnum = RANGE 1..9 OF LONGINT;
или
longnum = LONGINT RANGE 1..9;
TYPE WorkDays = Days RANGE Monday..Friday; (* здесь квалификатор определяющий принадлежность элементов стоит перед range *)