msumimz's diary

RubyにJITコンパイラを実装する個人プロジェクトの情報発信ブログです。

ローカル変数参照を実装しました

ローカル変数参照を実装しました。以下のコードが実行できます。

def m
  if true
    a = 10
  else
    a = 20
  end
  a
end

precompile Object, :m
puts m # => 10

LLVMは優秀なので、上のメソッドはこんなコードにコンパイルされます(x86の場合)。

mov eax, 15h
ret

15hは10のFixnum表記です。if文が消えて、単に定数を返すだけのメソッドになっているのがわかります。

https://github.com/msumimz/ruby/tree/rbjit