msumimz's diary

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

ソースコード

MRIソースコードを読む その1 メソッド定義の実装(下)

vm_method.c:rb_add_method()ですが、エラーチェックしながらデータを設定しているだけです。せっかくですのでJITコンパイラを実装するために必要そうな知識を整理しておきます。メソッド定義に関係するデータ構造は、rb_method_entry_tとrb_method_definiti…

MRIソースコードを読む その1 メソッド定義の実装(中)

さて、(上)に続いてメソッド定義の実装を見ていきます。core#define_methodの実体はvm.c:m_core_define_method()です。 #define REWIND_CFP(expr) do { \ rb_thread_t *th__ = GET_THREAD(); \ th__->cfp++; expr; th__->cfp--; \ } while (0) static VALU…

MRIソースコードを読む その1 メソッド定義の実装(上)

自分向けの備忘録として、MRIのソースコードを読んだ結果メモを記録しておきます。以下のソースコードは def m 1 end 次のISeqにコンパイルされます。 == disasm: <RubyVM::InstructionSequence:<main>@-e>====================== 0000 trace 1 ( 1) 0002 putspecialobject 1 0004 putspecialobj</rubyvm::instructionsequence:<main>…