докладаю, значить, по результатам практической проверки в Lament Configuration.

1. добавлены были обе формы: виртовская WHILE/ELSIF из Oberon-07, и моя LOOP/IF/ELSIF. виртовская добавилась тривиально (только цикл пришлось преобразовывать в REPEAT/UNTIL), для моей понадобился небольшой хак в StatSeq. в принципе, это причина не иметь моей формы в минималистичном компиляторе, но CP уже один фиг не совсем минималистичный. синтаксис был выбран без труб и ты пы:
## Код:
```
WHILE guard DO … ELSIF guard DO … END;
LOOP seq IF guard DO … ELSIF guard DO … END;
```

2. WHILE/ELSIF появляется в коде совершенно органично, «сам по себе». LOOP/IF/ELSIF оказался нужен реже, чем я думал; точнее, я про него реже вспоминаю, как и про FOR, например. он (LOOP/IF/ELSIF) таки удобен для реализации «loop with a sequence shift». семантически LOOP/IF/ELSIF точно то же самое, что и «классический» ЦД с копипастой операции сдвига в каждую ветку, так что на доказательства и инварианты форма не влияет.

3. подпиливать кодоген не пришлось, достаточно было просто создавать AST нужного вида в парзере. то есть, подпилить можно, конечно, чтобы избавиться от скрытой булевой переменной в реализации WHILE/ELSIF, но как по мне — оно совершенно некритично. замечу, что преобразовывать WHILE/ELSIF в LOOP нельзя, потому что тогда сломается семантика EXIT; поэтому пришлось сделать REPEAT/UNTIL со скрытым условием выхода.

итог: добавление считаю полезным, в Ultra Pascal оно останется. репорт о языке подпилил.