NODE_AND ほか
その前に、3つほど別の構文が間にはさまってました。and (&&), or (||), not (!) です。条件分岐のなかに出てくる場合は前にやりましたが、ここでは普通に式の途中に出てくるケースです。簡単なのでサックリと終わらせちゃいます。コードは省略です。
式1 and 式2 式1 or 式2
は、だいたい
if (tmp=式1) then tmp else 式2 unless (tmp=式1) then tmp else 式2
と同じなので、そんな感じにコンパイルされます。例えば and だと、こうです。
式1 dup # 分岐判定で使うので式1の値を複製 branchif end_label pop # 式1が偽だったので式1の値はもう不要 式2 end_label:
not はもっと単純で
式1 putnot
putnotというYARVの命令1個に変換されておしまいです。