定数畳み込み、定数伝播を実装しました

マイクロベンチマークにおいては、定数畳み込みや定数伝播があっても効果が無いケースがほとんどなので放置してましたが、今回新しい機能を入れるために取り掛かりました。

a: 10 + 20 + 30;
b: 4 + 5;
(a+b).p;

というコードは、69.p; と同じバイトコードが生成されます。

a: 100;
b: 200;
(((a + b < a * b) ? "true" : "false") ~ "!!!").p;

というコードは、"true!!!".p; と同じバイトコードが生成されます。

DEBUG: true;
if(DEBUG){
  "BOO!".p;
}

というコードは、"BOO!".p; と同じバイトコードが生成されます。

DEBUG: true;
if(!DEBUG){
  "BOO!".p;
}

というコードは、何のバイトコードも生成されません。