ひとり勉強会

ひとり楽しく勉強会

NODE_AND ほか

その前に、3つほど別の構文が間にはさまってました。and (&&), or (||), not (!) です。条件分岐のなかに出てくる場合は前にやりましたが、ここでは普通に式の途中に出てくるケースです。簡単なのでサックリと終わらせちゃいます。コードは省略です。

1 and21 or2

は、だいたい

if     (tmp=式1) then tmp else2
unless (tmp=式1) then tmp else2

と同じなので、そんな感じにコンパイルされます。例えば and だと、こうです。

  式1
  dup   # 分岐判定で使うので式1の値を複製
  branchif end_label
  pop   # 式1が偽だったので式1の値はもう不要
  式2
end_label:

not はもっと単純で

  式1
  putnot

putnotというYARVの命令1個に変換されておしまいです。