diff options
Diffstat (limited to 'method.h')
-rw-r--r-- | method.h | 17 |
1 files changed, 13 insertions, 4 deletions
@@ -42,7 +42,8 @@ typedef enum { VM_METHOD_TYPE_NOTIMPLEMENTED, VM_METHOD_TYPE_OPTIMIZED, /* Kernel#send, Proc#call, etc */ VM_METHOD_TYPE_MISSING, /* wrapper for method_missing(id) */ - VM_METHOD_TYPE_CFUNC_FRAMELESS + VM_METHOD_TYPE_CFUNC_FRAMELESS, + VM_METHOD_TYPE_REFINED, } rb_method_type_t; struct rb_call_info_struct; @@ -72,6 +73,7 @@ typedef struct rb_method_definition_struct { OPTIMIZED_METHOD_TYPE_SEND, OPTIMIZED_METHOD_TYPE_CALL } optimize_type; + struct rb_method_definition_struct *orig_def; } body; int alias_count; } rb_method_definition_t; @@ -94,9 +96,16 @@ struct unlinked_method_entry_list_entry { void rb_add_method_cfunc(VALUE klass, ID mid, VALUE (*func)(ANYARGS), int argc, rb_method_flag_t noex); rb_method_entry_t *rb_add_method(VALUE klass, ID mid, rb_method_type_t type, void *option, rb_method_flag_t noex); rb_method_entry_t *rb_method_entry(VALUE klass, ID id, VALUE *define_class_ptr); - -rb_method_entry_t *rb_method_entry_get_with_refinements(VALUE refinements, VALUE klass, ID id, VALUE *define_class_ptr); -rb_method_entry_t *rb_method_entry_get_without_cache(VALUE klass, VALUE refinements, ID id, VALUE *define_class_ptr); +void rb_add_refined_method_entry(VALUE refined_class, ID mid); +rb_method_entry_t *rb_resolve_refined_method(VALUE refinements, + rb_method_entry_t *me, + rb_method_entry_t *me_buf, + VALUE *defined_class_ptr); +rb_method_entry_t *rb_method_entry_with_refinements(VALUE klass, ID id, + rb_method_entry_t *me_buf, + VALUE *defined_class_ptr); + +rb_method_entry_t *rb_method_entry_get_without_cache(VALUE klass, ID id, VALUE *define_class_ptr); rb_method_entry_t *rb_method_entry_set(VALUE klass, ID mid, const rb_method_entry_t *, rb_method_flag_t noex); int rb_method_entry_arity(const rb_method_entry_t *me); |