Хотя конечно это дело можно развить и обобщить до внутренних блоков внутри функции со своими локальными переменными, часть которых являются производными от переменных основной функции после прохождения проверки на предусловие (по типу, значениям). По сути это дело отличается семантически от обычной вложенной функции только невозможностью рекурсии (то есть по умолчанию компилятор может спокойно это дело всегда инлайнить).
Но, по моему, я только что изобрел паттерн-матчинг в обероне :-)
Я кажется понял почему Вирт это дело выпилил - удобств особых это не добавляет, а язык сильно усложняет и запутывает. А поскольку WITH в Обероне никоем образом не похож на CASE, то даже обработку/разбор сообщений (в Message Bus) оно совсем не облегчает, соответственно Вирт просто избавился от бесполезного и не безопасного излишества.