拡張された多くの部分を実際に有効化するには、`MRB_USE_REFINEMENT` マクロを定義する必要があります。
有効にすると、オブジェクトコード及びヒープメモリをより多く使うこととなることに注意してください。
- `enum mrb_vtype` に `MRB_TT_REFINEMENT` を追加しました。
`MRB_TT_REFINEMENT` オブジェクトは struct RClass を使います。
- `MRB_PROC_SEPARATE_REFINEMENTS` フラグを追加します。
スコープは作らずともリファインメント範囲が区切られる `eval` のためです。
- `struct mrb_callinfo::activated_refinements` フィールドを追加しました。
- `struct RProc` を拡張
- `struct RProc::body.extra_proc` フィールドを追加します。
- `struct RProc::body.irep` フィールド名を `struct RProc::body.irep_direct` に変更します。
*重要*: これまでの `proc->body.irep` による irep ポインタの取得は `MRB_PROC_IREP(proc)` に置き換えます。
- `mrb_proc_new()` と `mrb_closure_new()` 関数を拡張し、使用するリファインメントの配列を受け取る引数を追加しました。
- `mrb_proc_copy()` 関数を拡張し、`mrb_state *` 引数を追加しました。
- 隠し関数の追加
- `mrb_cipush()` function
- `mrb_refinement_funcall()` function
- `mrb_refinement_method_search_vm()` function
- `mrb_refinement_method_search_vm_super()` function