Ruby 3.0.5p211 (2022-11-24 revision ba5cf0f7c52d4d35cc6a173c89eda98ceffa2dcf)
|
#include "internal.h"
#include "internal/imemo.h"
#include "internal/compilers.h"
#include "internal/static_assert.h"
Go to the source code of this file.
Data Structures | |
struct | rb_scope_visi_struct |
struct | rb_cref_struct |
CREF (Class REFerence) More... | |
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_bmethod_struct |
struct | rb_method_definition_struct |
Macros | |
#define | END_OF_ENUMERATION(key) |
#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 |= IMEMO_FL_USER3) |
#define | METHOD_ENTRY_CACHED(me) ((me)->flags & IMEMO_FL_USER4) |
#define | METHOD_ENTRY_CACHED_SET(me) ((me)->flags |= IMEMO_FL_USER4) |
#define | METHOD_ENTRY_INVALIDATED(me) ((me)->flags & IMEMO_FL_USER5) |
#define | METHOD_ENTRY_INVALIDATED_SET(me) ((me)->flags |= IMEMO_FL_USER5) |
#define | METHOD_ENTRY_CACHEABLE(me) !(METHOD_ENTRY_VISI(me) == METHOD_VISI_PROTECTED) |
#define | VM_METHOD_TYPE_MINIMUM_BITS 4 |
#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 |
CREF (Class REFerence) More... | |
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_bmethod_struct | rb_method_bmethod_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 } |
enum | method_optimized_type { OPTIMIZED_METHOD_TYPE_SEND , OPTIMIZED_METHOD_TYPE_CALL , OPTIMIZED_METHOD_TYPE_BLOCK_CALL , OPTIMIZED_METHOD_TYPE__MAX } |
#define METHOD_ENTRY_BASIC | ( | me | ) | (int) (((me)->flags & (IMEMO_FL_USER2 )) >> (IMEMO_FL_USHIFT+2)) |
#define METHOD_ENTRY_CACHEABLE | ( | me | ) | !(METHOD_ENTRY_VISI(me) == METHOD_VISI_PROTECTED) |
#define METHOD_ENTRY_CACHED | ( | me | ) | ((me)->flags & IMEMO_FL_USER4) |
#define METHOD_ENTRY_CACHED_SET | ( | me | ) | ((me)->flags |= IMEMO_FL_USER4) |
#define METHOD_ENTRY_COMPLEMENTED | ( | me | ) | ((me)->flags & IMEMO_FL_USER3) |
#define METHOD_ENTRY_COMPLEMENTED_SET | ( | me | ) | ((me)->flags |= IMEMO_FL_USER3) |
#define METHOD_ENTRY_INVALIDATED | ( | me | ) | ((me)->flags & IMEMO_FL_USER5) |
#define METHOD_ENTRY_INVALIDATED_SET | ( | me | ) | ((me)->flags |= IMEMO_FL_USER5) |
#define METHOD_ENTRY_VISI | ( | me | ) | (rb_method_visibility_t)(((me)->flags & (IMEMO_FL_USER0 | IMEMO_FL_USER1)) >> (IMEMO_FL_USHIFT+0)) |
#define UNDEFINED_METHOD_ENTRY_P | ( | me | ) | (!(me) || !(me)->def || (me)->def->type == VM_METHOD_TYPE_UNDEF) |
#define UNDEFINED_REFINED_METHOD_P | ( | def | ) |
typedef struct rb_callable_method_entry_struct rb_callable_method_entry_t |
typedef struct rb_cref_struct rb_cref_t |
CREF (Class REFerence)
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_bmethod_struct rb_method_bmethod_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 |
Enumerator | |
---|---|
VM_METHOD_TYPE_ISEQ | Ruby method. |
VM_METHOD_TYPE_CFUNC | C method. |
VM_METHOD_TYPE_ATTRSET | attr_writer or attr_accessor |
VM_METHOD_TYPE_IVAR | attr_reader or attr_accessor |
VM_METHOD_TYPE_BMETHOD | |
VM_METHOD_TYPE_ZSUPER | |
VM_METHOD_TYPE_ALIAS | |
VM_METHOD_TYPE_UNDEF | |
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_REFINED | refinement |
void rb_add_method | ( | VALUE | klass, |
ID | mid, | ||
rb_method_type_t | type, | ||
void * | option, | ||
rb_method_visibility_t | visi | ||
) |
Definition at line 900 of file vm_method.c.
References NULL, VM_METHOD_TYPE_REFINED, and VM_METHOD_TYPE_UNDEF.
Referenced by Init_Proc(), Init_VM(), Init_vm_eval(), rb_add_method_cfunc(), rb_add_method_iseq(), rb_add_refined_method_entry(), rb_attr(), rb_undef(), and rb_undef_method().
void rb_add_method_cfunc | ( | VALUE | klass, |
ID | mid, | ||
VALUE(*)(ANYARGS) | func, | ||
int | argc, | ||
rb_method_visibility_t | visi | ||
) |
Definition at line 313 of file vm_method.c.
References rb_method_cfunc_struct::argc, argc, rb_method_cfunc_struct::func, rb_add_method(), 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 910 of file vm_method.c.
References rb_add_method(), and VM_METHOD_TYPE_ISEQ.
Definition at line 709 of file vm_method.c.
References METHOD_VISI_PUBLIC, rb_add_method(), rb_clear_method_cache(), and VM_METHOD_TYPE_REFINED.
const rb_callable_method_entry_t * rb_callable_method_entry | ( | VALUE | klass, |
ID | id | ||
) |
Definition at line 1177 of file vm_method.c.
References NULL.
Referenced by rb_check_funcall_basic_kw(), and rb_method_basic_definition_p().
const rb_callable_method_entry_t * rb_callable_method_entry_with_refinements | ( | VALUE | klass, |
ID | id, | ||
VALUE * | defined_class | ||
) |
Definition at line 1235 of file vm_method.c.
const rb_callable_method_entry_t * rb_callable_method_entry_without_refinements | ( | VALUE | klass, |
ID | id, | ||
VALUE * | defined_class | ||
) |
Definition at line 1253 of file vm_method.c.
Definition at line 236 of file vm_method.c.
References FL_TEST, rb_class_foreach_subclass(), rb_clear_method_cache(), RMODULE_IS_REFINEMENT, and T_MODULE.
Referenced by rb_add_refined_method_entry(), and rb_clear_method_cache().
void rb_clear_method_cache_all | ( | void | ) |
Definition at line 280 of file vm_method.c.
References NULL, and rb_objspace_each_objects().
void rb_free_method_entry | ( | const rb_method_entry_t * | me | ) |
Definition at line 358 of file vm_method.c.
References rb_method_entry_struct::def, and METHOD_ENTRY_COMPLEMENTED.
st_index_t rb_hash_method_entry | ( | st_index_t | hash, |
const rb_method_entry_t * | me | ||
) |
Definition at line 1920 of file vm_method.c.
References rb_method_entry_struct::def.
const rb_method_entry_t * rb_method_entry | ( | VALUE | klass, |
ID | id | ||
) |
Definition at line 1023 of file vm_method.c.
References NULL.
int rb_method_entry_arity | ( | const rb_method_entry_t * | me | ) |
Definition at line 2684 of file proc.c.
References max, and METHOD::me.
Referenced by rb_mod_method_arity(), and rb_tracearg_parameters().
const rb_method_entry_t * rb_method_entry_at | ( | VALUE | obj, |
ID | id | ||
) |
Definition at line 973 of file vm_method.c.
Referenced by rb_obj_singleton_method().
const rb_method_entry_t * rb_method_entry_clone | ( | const rb_method_entry_t * | me | ) |
Definition at line 606 of file vm_method.c.
References rb_method_entry_struct::called_id, rb_method_entry_struct::def, rb_method_entry_struct::defined_class, METHOD_ENTRY_COMPLEMENTED, and rb_method_entry_struct::owner.
Referenced by rb_alias(), and rb_method_entry_complement_defined_class().
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 619 of file vm_method.c.
References rb_method_entry_struct::called_id, def(), rb_method_entry_struct::def, rb_method_entry_struct::defined_class, METHOD_ENTRY_COMPLEMENTED_SET, NULL, rb_method_entry_struct::owner, rb_method_definition_create(), rb_method_definition_set(), rb_method_entry_clone(), RB_OBJ_WRITE, T_MODULE, VM_ASSERT, and VM_METHOD_TYPE_REFINED.
Referenced by rb_resolve_refined_method_callable().
void rb_method_entry_copy | ( | rb_method_entry_t * | dst, |
const rb_method_entry_t * | src | ||
) |
Definition at line 655 of file vm_method.c.
References rb_method_entry_struct::called_id, rb_method_entry_struct::def, rb_method_entry_struct::defined_class, rb_method_entry_struct::owner, and RB_OBJ_WRITE.
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 597 of file vm_method.c.
References def(), FALSE, NULL, ruby_running, and TRUE.
int rb_method_entry_eq | ( | const rb_method_entry_t * | m1, |
const rb_method_entry_t * | m2 | ||
) |
Definition at line 1821 of file vm_method.c.
References rb_method_entry_struct::def, and rb_method_definition_eq().
VALUE rb_method_entry_location | ( | const rb_method_entry_t * | me | ) |
Definition at line 2869 of file proc.c.
References rb_method_entry_struct::def, METHOD::me, and Qnil.
rb_method_entry_t * rb_method_entry_set | ( | VALUE | klass, |
ID | mid, | ||
const rb_method_entry_t * | me, | ||
rb_method_visibility_t | noex | ||
) |
Definition at line 939 of file vm_method.c.
const rb_method_entry_t * rb_method_entry_with_refinements | ( | VALUE | klass, |
ID | id, | ||
VALUE * | defined_class | ||
) |
Definition at line 1208 of file vm_method.c.
References TRUE.
const rb_method_entry_t * rb_method_entry_without_refinements | ( | VALUE | klass, |
ID | id, | ||
VALUE * | defined_class | ||
) |
Definition at line 1247 of file vm_method.c.
References FALSE.
Referenced by rb_tracearg_parameters().
void rb_method_table_insert | ( | VALUE | klass, |
struct rb_id_table * | table, | ||
ID | method_id, | ||
const rb_method_entry_t * | me | ||
) |
Definition at line 286 of file vm_method.c.
References Qundef, rb_id_table_insert(), RB_OBJ_WRITTEN, RBASIC, RCLASS_M_TBL, T_CLASS, T_ICLASS, T_MODULE, and VM_ASSERT.
const rb_method_entry_t * rb_resolve_me_location | ( | const rb_method_entry_t * | me, |
VALUE | resolved_location[5] | ||
) |
Definition at line 5694 of file thread.c.
References rb_method_definition_struct::alias, rb_code_location_struct::beg_pos, rb_method_definition_struct::bmethod, rb_method_definition_struct::body, rb_iseq_struct::body, rb_iseq_location_struct::code_location, rb_code_position_struct::column, rb_method_entry_struct::def, rb_code_location_struct::end_pos, INT2FIX, rb_method_definition_struct::iseq, rb_method_iseq_struct::iseqptr, rb_code_position_struct::lineno, rb_iseq_constant_body::location, NULL, rb_method_refined_struct::orig_me, rb_method_alias_struct::original_me, rb_method_bmethod_struct::proc, rb_ary_entry(), rb_iseq_path(), rb_proc_get_iseq(), rb_method_definition_struct::refined, T_ARRAY, T_STRING, VM_METHOD_TYPE_ALIAS, VM_METHOD_TYPE_BMETHOD, VM_METHOD_TYPE_ISEQ, and VM_METHOD_TYPE_REFINED.
const rb_method_entry_t * rb_resolve_refined_method | ( | VALUE | refinements, |
const rb_method_entry_t * | me | ||
) |
Definition at line 1294 of file vm_method.c.
References NULL.
Referenced by rb_alias(), and rb_undef().
void rb_scope_visibility_set | ( | rb_method_visibility_t | visi | ) |
Definition at line 1483 of file vm_method.c.
References FALSE.
Definition at line 1393 of file proc.c.
References CONST_ID, ID2SYM, OBJ_FREEZE, rb_ary_new2, rb_ary_new3, rb_ary_push(), and rb_ary_store().
Referenced by rb_tracearg_parameters().
STATIC_ASSERT | ( | sizeof_method_def | , |
offsetof(rb_method_definition_t, body) | = =8 |
||
) |
STATIC_ASSERT | ( | VM_METHOD_TYPE_MINIMUM_BITS | , |
VM_METHOD_TYPE_REFINED<= | 1<< VM_METHOD_TYPE_MINIMUM_BITS | ||
) |