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の実装が、仕様と全然間違ってしてたので直しました。