Ruby
2.4.2p198(2017-09-14revision59899)
|
#include "internal.h"
Go to the source code of this file.
Data Structures | |
struct | rb_scope_visi_struct |
struct | rb_cref_struct |
struct | rb_method_entry_struct |
struct | rb_callable_method_entry_struct |
struct | rb_method_iseq_struct |
struct | rb_method_cfunc_struct |
struct | rb_method_attr_struct |
struct | rb_method_alias_struct |
struct | rb_method_refined_struct |
struct | rb_method_definition_struct |
Macros | |
#define | END_OF_ENUMERATION(key) END_OF_##key##_PLACEHOLDER = 0 |
#define | METHOD_ENTRY_VISI(me) (rb_method_visibility_t)(((me)->flags & (IMEMO_FL_USER0 | IMEMO_FL_USER1)) >> (IMEMO_FL_USHIFT+0)) |
#define | METHOD_ENTRY_BASIC(me) (int) (((me)->flags & (IMEMO_FL_USER2 )) >> (IMEMO_FL_USHIFT+2)) |
#define | METHOD_ENTRY_COMPLEMENTED(me) ((me)->flags & IMEMO_FL_USER3) |
#define | METHOD_ENTRY_COMPLEMENTED_SET(me) ((me)->flags = (me)->flags | IMEMO_FL_USER3) |
#define | rb_iseq_t rb_iseq_t |
#define | UNDEFINED_METHOD_ENTRY_P(me) (!(me) || !(me)->def || (me)->def->type == VM_METHOD_TYPE_UNDEF) |
#define | UNDEFINED_REFINED_METHOD_P(def) |
Typedefs | |
typedef struct rb_scope_visi_struct | rb_scope_visibility_t |
typedef struct rb_cref_struct | rb_cref_t |
typedef struct rb_method_entry_struct | rb_method_entry_t |
typedef struct rb_callable_method_entry_struct | rb_callable_method_entry_t |
typedef struct rb_iseq_struct | rb_iseq_t |
typedef struct rb_method_iseq_struct | rb_method_iseq_t |
typedef struct rb_method_cfunc_struct | rb_method_cfunc_t |
typedef struct rb_method_attr_struct | rb_method_attr_t |
typedef struct rb_method_alias_struct | rb_method_alias_t |
typedef struct rb_method_refined_struct | rb_method_refined_t |
typedef struct rb_method_definition_struct | rb_method_definition_t |
Enumerations | |
enum | rb_method_visibility_t { METHOD_VISI_UNDEF = 0x00, METHOD_VISI_PUBLIC = 0x01, METHOD_VISI_PRIVATE = 0x02, METHOD_VISI_PROTECTED = 0x03, METHOD_VISI_MASK = 0x03 } |
enum | rb_method_type_t { VM_METHOD_TYPE_ISEQ, VM_METHOD_TYPE_CFUNC, VM_METHOD_TYPE_ATTRSET, VM_METHOD_TYPE_IVAR, VM_METHOD_TYPE_BMETHOD, VM_METHOD_TYPE_ZSUPER, VM_METHOD_TYPE_ALIAS, VM_METHOD_TYPE_UNDEF, VM_METHOD_TYPE_NOTIMPLEMENTED, VM_METHOD_TYPE_OPTIMIZED, VM_METHOD_TYPE_MISSING, VM_METHOD_TYPE_REFINED } |
#define METHOD_ENTRY_BASIC | ( | me | ) | (int) (((me)->flags & (IMEMO_FL_USER2 )) >> (IMEMO_FL_USHIFT+2)) |
Definition at line 67 of file method.h.
Referenced by basic_obj_respond_to_missing(), check_funcall_missing(), method_missing(), rb_method_basic_definition_p(), and vm_respond_to().
#define METHOD_ENTRY_COMPLEMENTED | ( | me | ) | ((me)->flags & IMEMO_FL_USER3) |
Definition at line 68 of file method.h.
Referenced by rb_free_method_entry().
#define METHOD_ENTRY_COMPLEMENTED_SET | ( | me | ) | ((me)->flags = (me)->flags | IMEMO_FL_USER3) |
Definition at line 69 of file method.h.
Referenced by rb_method_entry_complement_defined_class().
#define METHOD_ENTRY_VISI | ( | me | ) | (rb_method_visibility_t)(((me)->flags & (IMEMO_FL_USER0 | IMEMO_FL_USER1)) >> (IMEMO_FL_USHIFT+0)) |
Definition at line 66 of file method.h.
Referenced by check_definition(), clone_method(), method_entry_i(), mnew_internal(), rb_alias(), rb_export_method(), rb_method_boundp(), rb_method_call_status(), vm_call_method(), vm_callee_setup_arg(), and vm_defined().
#define UNDEFINED_METHOD_ENTRY_P | ( | me | ) | (!(me) || !(me)->def || (me)->def->type == VM_METHOD_TYPE_UNDEF) |
Definition at line 171 of file method.h.
Referenced by method_entry_get_without_cache(), method_entry_i(), method_entry_resolve_refinement(), mnew_internal(), rb_alias(), rb_export_method(), rb_method_call_status(), rb_mod_modfunc(), rb_obj_singleton_method(), rb_undef(), and refined_method_callable_without_refinement().
#define UNDEFINED_REFINED_METHOD_P | ( | def | ) |
Definition at line 172 of file method.h.
Referenced by rb_alias(), rb_export_method(), rb_obj_singleton_method(), rb_undef(), and remove_method().
typedef struct rb_callable_method_entry_struct rb_callable_method_entry_t |
typedef struct rb_cref_struct rb_cref_t |
typedef struct rb_iseq_struct rb_iseq_t |
typedef struct rb_method_alias_struct rb_method_alias_t |
typedef struct rb_method_attr_struct rb_method_attr_t |
typedef struct rb_method_cfunc_struct rb_method_cfunc_t |
typedef struct rb_method_definition_struct rb_method_definition_t |
typedef struct rb_method_entry_struct rb_method_entry_t |
typedef struct rb_method_iseq_struct rb_method_iseq_t |
typedef struct rb_method_refined_struct rb_method_refined_t |
typedef struct rb_scope_visi_struct rb_scope_visibility_t |
enum rb_method_type_t |
|
inlinestatic |
Definition at line 78 of file method.h.
References rb_method_entry_struct::flags, IMEMO_FL_USER2, IMEMO_FL_USHIFT, and VM_ASSERT.
|
inlinestatic |
Definition at line 93 of file method.h.
References rb_method_entry_struct::flags, IMEMO_FL_USER0, IMEMO_FL_USER1, and IMEMO_FL_USER2.
Referenced by make_method_entry_refined(), rb_method_entry_clone(), rb_method_entry_complement_defined_class(), and rb_method_entry_copy().
|
inlinestatic |
Definition at line 84 of file method.h.
References rb_method_entry_struct::flags, IMEMO_FL_USER0, IMEMO_FL_USER1, IMEMO_FL_USER2, IMEMO_FL_USHIFT, and VM_ASSERT.
Referenced by rb_method_entry_create().
|
inlinestatic |
Definition at line 72 of file method.h.
References rb_method_entry_struct::flags, IMEMO_FL_USER0, IMEMO_FL_USER1, IMEMO_FL_USHIFT, and VM_ASSERT.
Referenced by make_method_entry_refined(), and rb_export_method().
rb_method_entry_t* rb_add_method | ( | VALUE | klass, |
ID | mid, | ||
rb_method_type_t | type, | ||
void * | option, | ||
rb_method_visibility_t | visi | ||
) |
Definition at line 631 of file vm_method.c.
References cache_entry::me, method_added(), NULL, rb_method_entry_make(), VM_METHOD_TYPE_REFINED, and VM_METHOD_TYPE_UNDEF.
Referenced by Init_Proc(), Init_vm_eval(), rb_add_method_cfunc(), rb_add_method_iseq(), rb_add_refined_method_entry(), rb_attr(), rb_define_notimplement_method_id(), rb_export_method(), rb_mod_define_method(), rb_undef(), rb_undef_method(), and undef_method_i().
void rb_add_method_cfunc | ( | VALUE | klass, |
ID | mid, | ||
VALUE(*)(ANYARGS) | func, | ||
int | argc, | ||
rb_method_visibility_t | visi | ||
) |
Definition at line 136 of file vm_method.c.
References rb_method_cfunc_struct::argc, argc, func, rb_method_cfunc_struct::func, rb_add_method(), rb_define_notimplement_method_id(), rb_eArgError, rb_f_notimplement(), rb_raise(), and VM_METHOD_TYPE_CFUNC.
Referenced by rb_define_method(), rb_define_method_id(), rb_define_private_method(), and rb_define_protected_method().
void rb_add_method_iseq | ( | VALUE | klass, |
ID | mid, | ||
const rb_iseq_t * | iseq, | ||
rb_cref_t * | cref, | ||
rb_method_visibility_t | visi | ||
) |
Definition at line 643 of file vm_method.c.
References rb_add_method(), and VM_METHOD_TYPE_ISEQ.
Referenced by clone_method(), define_aref_method(), define_aset_method(), and vm_define_method().
Definition at line 462 of file vm_method.c.
References lookup_method_table(), make_method_entry_refined(), cache_entry::me, METHOD_VISI_PUBLIC, rb_add_method(), rb_clear_method_cache_by_class(), and VM_METHOD_TYPE_REFINED.
Referenced by add_refined_method_entry_i(), rb_method_entry_make(), and remove_method().
const rb_callable_method_entry_t* rb_callable_method_entry | ( | VALUE | klass, |
ID | id | ||
) |
Definition at line 834 of file vm_method.c.
References cache_entry::defined_class, method_entry_get(), prepare_callable_method_entry(), and resolve_refined_method().
Referenced by method_missing(), rb_search_method_entry(), vm_call0_body(), vm_call_method_each_type(), vm_call_super(), vm_call_zsuper(), vm_search_method(), and vm_search_super_method().
const rb_callable_method_entry_t* rb_callable_method_entry_with_refinements | ( | VALUE | klass, |
ID | id | ||
) |
Definition at line 873 of file vm_method.c.
References cache_entry::defined_class, method_entry_resolve_refinement(), prepare_callable_method_entry(), and TRUE.
Referenced by check_match(), refine_sym_proc_call(), and vm_call_opt_send().
const rb_callable_method_entry_t* rb_callable_method_entry_without_refinements | ( | VALUE | klass, |
ID | id | ||
) |
Definition at line 887 of file vm_method.c.
References cache_entry::defined_class, FALSE, method_entry_resolve_refinement(), and prepare_callable_method_entry().
Referenced by method_super_method(), mnew(), mnew_internal(), and vm_call_method_missing().
void rb_free_method_entry | ( | const rb_method_entry_t * | me | ) |
Definition at line 174 of file vm_method.c.
References d1, rb_method_entry_struct::def, METHOD_ENTRY_COMPLEMENTED, rb_method_definition_eq(), rb_method_definition_release(), and search_method().
Referenced by obj_free().
st_index_t rb_hash_method_entry | ( | st_index_t | hash, |
const rb_method_entry_t * | me | ||
) |
Definition at line 1520 of file vm_method.c.
References rb_method_entry_struct::def, and rb_hash_method_definition().
Referenced by method_hash().
const rb_method_entry_t* rb_method_entry | ( | VALUE | klass, |
ID | id | ||
) |
Definition at line 796 of file vm_method.c.
References method_entry_get(), and NULL.
Referenced by check_override_opt_method(), check_redefined_method(), original_method_entry(), rb_method_basic_definition_p(), rb_obj_basic_to_s_p(), and vm_defined().
int rb_method_entry_arity | ( | const rb_method_entry_t * | me | ) |
Definition at line 2341 of file proc.c.
References max(), and rb_method_entry_min_max_arity().
Referenced by method_arity(), rb_mod_method_arity(), and vm_respond_to().
const rb_method_entry_t* rb_method_entry_at | ( | VALUE | obj, |
ID | id | ||
) |
Definition at line 714 of file vm_method.c.
References lookup_method_table().
Referenced by add_opt_method(), and rb_obj_singleton_method().
const rb_method_entry_t* rb_method_entry_clone | ( | const rb_method_entry_t * | me | ) |
Definition at line 402 of file vm_method.c.
References rb_method_entry_struct::called_id, rb_method_entry_struct::def, rb_method_entry_struct::defined_class, cache_entry::me, method_definition_addref(), METHOD_ENTRY_FLAGS_COPY(), rb_method_entry_struct::owner, and rb_method_entry_alloc().
Referenced by method_clone(), method_unbind(), move_refined_method(), rb_alias(), and umethod_bind().
const rb_callable_method_entry_t* rb_method_entry_complement_defined_class | ( | const rb_method_entry_t * | src_me, |
ID | called_id, | ||
VALUE | defined_class | ||
) |
Definition at line 411 of file vm_method.c.
References rb_method_entry_struct::def, cache_entry::me, method_definition_addref_complement(), METHOD_ENTRY_COMPLEMENTED_SET, METHOD_ENTRY_FLAGS_COPY(), rb_method_entry_struct::owner, rb_method_entry_alloc(), RB_TYPE_P, T_MODULE, and VM_ASSERT.
Referenced by aliased_callable_method_entry(), prepare_callable_method_entry(), rb_resolve_refined_method_callable(), and umethod_bind().
void rb_method_entry_copy | ( | rb_method_entry_t * | dst, |
const rb_method_entry_t * | src | ||
) |
Definition at line 424 of file vm_method.c.
References rb_method_entry_struct::called_id, rb_method_entry_struct::def, rb_method_entry_struct::defined_class, method_definition_addref(), method_definition_reset(), METHOD_ENTRY_FLAGS_COPY(), rb_method_entry_struct::owner, and RB_OBJ_WRITE.
Referenced by move_refined_method().
rb_method_entry_t* rb_method_entry_create | ( | ID | called_id, |
VALUE | klass, | ||
rb_method_visibility_t | visi, | ||
const rb_method_definition_t * | def | ||
) |
Definition at line 393 of file vm_method.c.
References FALSE, filter_defined_class(), cache_entry::me, method_definition_reset(), METHOD_ENTRY_FLAGS_SET(), NULL, rb_method_entry_alloc(), ruby_running, and TRUE.
Referenced by mnew_missing(), and rb_method_entry_make().
int rb_method_entry_eq | ( | const rb_method_entry_t * | m1, |
const rb_method_entry_t * | m2 | ||
) |
Definition at line 1421 of file vm_method.c.
References rb_method_entry_struct::def, and rb_method_definition_eq().
Referenced by method_eq().
VALUE rb_method_entry_location | ( | const rb_method_entry_t * | me | ) |
Definition at line 2501 of file proc.c.
References rb_method_entry_struct::def, method_def_location(), and Qnil.
Referenced by rb_mod_method_location(), and vm_respond_to().
rb_method_entry_t* rb_method_entry_set | ( | VALUE | klass, |
ID | mid, | ||
const rb_method_entry_t * | , | ||
rb_method_visibility_t | noex | ||
) |
Definition at line 666 of file vm_method.c.
References method_entry_set().
Referenced by clone_method(), rb_mod_define_method(), and rb_mod_modfunc().
const rb_method_entry_t* rb_method_entry_with_refinements | ( | VALUE | klass, |
ID | id | ||
) |
Definition at line 867 of file vm_method.c.
References method_entry_resolve_refinement(), NULL, and TRUE.
const rb_method_entry_t* rb_method_entry_without_refinements | ( | VALUE | klass, |
ID | id | ||
) |
Definition at line 881 of file vm_method.c.
References FALSE, method_entry_resolve_refinement(), and NULL.
Referenced by check_definition(), mnew(), mnew_internal(), and rb_method_boundp().
Definition at line 2508 of file proc.c.
References METHOD::me, original_method_entry(), and rb_method_entry_location().
Referenced by rb_obj_method_location().
Definition at line 2515 of file proc.c.
References CLASS_OF, and rb_mod_method_location().
const rb_method_entry_t* rb_resolve_refined_method | ( | VALUE | refinements, |
const rb_method_entry_t * | me | ||
) |
Definition at line 941 of file vm_method.c.
References NULL, and resolve_refined_method().
Referenced by method_entry_i(), rb_alias(), and rb_undef().
const rb_callable_method_entry_t* rb_resolve_refined_method_callable | ( | VALUE | refinements, |
const rb_callable_method_entry_t * | me | ||
) |
Definition at line 947 of file vm_method.c.
References rb_method_entry_struct::called_id, rb_method_entry_struct::defined_class, rb_callable_method_entry_struct::defined_class, rb_method_entry_complement_defined_class(), and resolve_refined_method().
Referenced by rb_method_call_status().
void rb_scope_visibility_set | ( | rb_method_visibility_t | ) |
Definition at line 1126 of file vm_method.c.
References FALSE, and vm_cref_set_visibility().
Referenced by load_ext(), and set_visibility().
void rb_sweep_method_entry | ( | void * | vm | ) |