Skip to content

Latest commit

 

History

History
30 lines (20 loc) · 1.06 KB

class.rst

File metadata and controls

30 lines (20 loc) · 1.06 KB

Class

Details

APIs

void mrb_define_method_raw(mrb_state*, struct RClass*, mrb_sym, struct RProc *)

  • RProc 構造体を使ってクラスメソッドを定義する
    • mrb_define_method() では関数ポインタをメソッドの定義として渡していたが、こちらは RProc
    • クラスの kh(内部的なハッシュ、で合ってる?)に第三引数のシンボルのキーに対し RProc ポインタをセット

struct RProc *mrb_method_search(mrb_state*, struct RClass*, mrb_sym)

  • RiteVM 中で定義済みのメソッドを探索する
  • 中で mrb_method_search_vm() を呼んでる
    • メソッドが見つからなかった場合の追加処理がある

mrb_method_search_vm()

  • クラス内に定義されるメソッドを、 khash をなめることで探索する
  • 見つからなかったら親クラスをたどる