first_step
ループの中で暗黙的に定義される、最初の一回はtrueとなりそれ以降はfalseとなる変数「first_step」を実装しました。
3.times{ first_step.p; } //=> true //=> false //=> false for(i: 0; i<3; ++i){ if(first_step){ "a".p; }else{ "b".p; } "!".p; } //=> a //=> ! //=> b //=> ! //=> b //=> !
定数伝播により、上のfor文のコードからif(first_step)という判定部分は消え去ります。
つまり、上のコードは、次と同等のバイトコードが出力されるということです。
i: 0; "a".p; "!".p; ++i; for(; i<3; ++i){ "b".p; "!".p; }
あと、ループ文のnobreakと、elseの実装が、仕様と全然間違ってしてたので直しました。