Константы и условная компиляция

Я глубоко убеждён, что константные типы недооцениваются разработчиками компиляторов и, как итог, разработчиками. Константы должны задавать не просто "неизменяемые" данные с удобным доступом, но и участвовать в прекомпиляции (условной компиляции).

Скажем у нас есть такой псевдо-код:

// consts
const C_PARAM:int = 5;
// block 1
if(C_PARAM == 1) {
  trace("Param 1");
}
// block 2
if(C_PARAM == 5) {
  trace("Param 5");
}
// block 3
var i:int = 5 + C_PARAM;
// block 4
if(i == 5 && C_PARAM == 3) {
  trace("xxx");
}
// block 5
if(i == 7 || C_PARAM == 5) {
  trace("yyy");
}
// block 6
if(i == 3 || C_PARAM == 7) {
  trace("zzz");
}

Логично, что после прекомпиляции компилятор должен получить следующий код:

trace("Param 5");
var i:int = 10;
trace("yyy");
if(i == 3) {
  trace("zzz");
}

И не нужно изобретать какие-то дополнительные конструкции условной компиляции. Т.е. необязательно полностью вычислять всю программу, достаточно хотя бы адекватно обсчитать все константы и условия (на невыполнимость и выпилить такие, и на выполнимость и убрать само условие, оставив сам блок), чтобы всем было удобно.