msumimz's diary

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

定数を実装しました

定数を実装しました。

module Outer
  class C
    X = 10
  end
end

def m
  Outer::C::X
end

Jit.precompile Object, :m

puts m   # => 10

定数の値はコンパイル時に展開されます。定数の再定義やオートロードにも対応しています。

class_eval辺りと組み合わせると問題が起きるかもしれません。eval系メソッドの取り扱いは、ブロックを実装するときに合わせて考えようと思います。

実装していて気付いたのですが、Rubyでは

nil::C

という書き方ができて、

C

と同じ意味になるのですね。Rubyにありがちですが、たまたま実装の都合でできてしまっているのか正式の文法なのかよくわかりません。自分のコードでは使わない方がよさそうです。