Ruby  2.5.0dev(2017-10-22revision60238)
Data Structures | Macros | Typedefs | Enumerations | Functions
method.h File Reference
#include "internal.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
 

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
 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_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__MAX }
 

Functions

 PACKED_STRUCT_UNALIGNED (struct rb_method_definition_struct { unsigned int type :4;int alias_count :28;int complemented_count :28;union { rb_method_iseq_t iseq;rb_method_cfunc_t cfunc;rb_method_attr_t attr;rb_method_alias_t alias;rb_method_refined_t refined;const VALUE proc;enum method_optimized_type optimize_type;} body;ID original_id;})
 
void rb_add_method_cfunc (VALUE klass, ID mid, VALUE(*func)(ANYARGS), int argc, rb_method_visibility_t visi)
 
void rb_add_method_iseq (VALUE klass, ID mid, const rb_iseq_t *iseq, rb_cref_t *cref, rb_method_visibility_t visi)
 
void rb_add_refined_method_entry (VALUE refined_class, ID mid)
 
rb_method_entry_trb_add_method (VALUE klass, ID mid, rb_method_type_t type, void *option, rb_method_visibility_t visi)
 
rb_method_entry_trb_method_entry_set (VALUE klass, ID mid, const rb_method_entry_t *, rb_method_visibility_t noex)
 
rb_method_entry_trb_method_entry_create (ID called_id, VALUE klass, rb_method_visibility_t visi, const rb_method_definition_t *def)
 
const rb_method_entry_trb_method_entry_at (VALUE obj, ID id)
 
const rb_method_entry_trb_method_entry (VALUE klass, ID id)
 
const rb_method_entry_trb_method_entry_with_refinements (VALUE klass, ID id, VALUE *defined_class)
 
const rb_method_entry_trb_method_entry_without_refinements (VALUE klass, ID id, VALUE *defined_class)
 
const rb_method_entry_trb_resolve_refined_method (VALUE refinements, const rb_method_entry_t *me)
 
const rb_callable_method_entry_trb_callable_method_entry (VALUE klass, ID id)
 
const rb_callable_method_entry_trb_callable_method_entry_with_refinements (VALUE klass, ID id, VALUE *defined_class)
 
const rb_callable_method_entry_trb_callable_method_entry_without_refinements (VALUE klass, ID id, VALUE *defined_class)
 
const rb_callable_method_entry_trb_resolve_refined_method_callable (VALUE refinements, const rb_callable_method_entry_t *me)
 
int rb_method_entry_arity (const rb_method_entry_t *me)
 
int rb_method_entry_eq (const rb_method_entry_t *m1, const rb_method_entry_t *m2)
 
st_index_t rb_hash_method_entry (st_index_t hash, const rb_method_entry_t *me)
 
VALUE rb_method_entry_location (const rb_method_entry_t *me)
 
VALUE rb_mod_method_location (VALUE mod, ID id)
 
VALUE rb_obj_method_location (VALUE obj, ID id)
 
void rb_free_method_entry (const rb_method_entry_t *me)
 
void rb_sweep_method_entry (void *vm)
 
const rb_method_entry_trb_method_entry_clone (const rb_method_entry_t *me)
 
const rb_callable_method_entry_trb_method_entry_complement_defined_class (const rb_method_entry_t *src_me, ID called_id, VALUE defined_class)
 
void rb_method_entry_copy (rb_method_entry_t *dst, const rb_method_entry_t *src)
 
void rb_scope_visibility_set (rb_method_visibility_t)
 

Macro Definition Documentation

◆ END_OF_ENUMERATION

#define END_OF_ENUMERATION (   key)    END_OF_##key##_PLACEHOLDER = 0

Definition at line 20 of file method.h.

◆ METHOD_ENTRY_BASIC

#define METHOD_ENTRY_BASIC (   me)    (int) (((me)->flags & (IMEMO_FL_USER2 )) >> (IMEMO_FL_USHIFT+2))

Definition at line 68 of file method.h.

Referenced by rb_method_basic_definition_p().

◆ METHOD_ENTRY_COMPLEMENTED

#define METHOD_ENTRY_COMPLEMENTED (   me)    ((me)->flags & IMEMO_FL_USER3)

Definition at line 69 of file method.h.

◆ METHOD_ENTRY_COMPLEMENTED_SET

#define METHOD_ENTRY_COMPLEMENTED_SET (   me)    ((me)->flags = (me)->flags | IMEMO_FL_USER3)

Definition at line 70 of file method.h.

◆ METHOD_ENTRY_VISI

#define METHOD_ENTRY_VISI (   me)    (rb_method_visibility_t)(((me)->flags & (IMEMO_FL_USER0 | IMEMO_FL_USER1)) >> (IMEMO_FL_USHIFT+0))

Definition at line 67 of file method.h.

Referenced by rb_method_boundp().

◆ rb_iseq_t

#define rb_iseq_t   rb_iseq_t

Definition at line 120 of file method.h.

◆ UNDEFINED_METHOD_ENTRY_P

#define UNDEFINED_METHOD_ENTRY_P (   me)    (!(me) || !(me)->def || (me)->def->type == VM_METHOD_TYPE_UNDEF)

Definition at line 175 of file method.h.

◆ UNDEFINED_REFINED_METHOD_P

#define UNDEFINED_REFINED_METHOD_P (   def)
Value:
((def)->type == VM_METHOD_TYPE_REFINED && \
UNDEFINED_METHOD_ENTRY_P((def)->body.refined.orig_me))
#define UNDEFINED_METHOD_ENTRY_P(me)
Definition: method.h:175
refinement
Definition: method.h:113

Definition at line 176 of file method.h.

Typedef Documentation

◆ rb_callable_method_entry_t

◆ rb_cref_t

typedef struct rb_cref_struct rb_cref_t

CREF (Class REFerence)

◆ rb_iseq_t

typedef struct rb_iseq_struct rb_iseq_t

Definition at line 119 of file method.h.

◆ rb_method_alias_t

◆ rb_method_attr_t

◆ rb_method_cfunc_t

◆ rb_method_definition_t

typedef struct rb_method_definition_struct rb_method_definition_t

Definition at line 173 of file method.h.

◆ rb_method_entry_t

◆ rb_method_iseq_t

◆ rb_method_refined_t

◆ rb_scope_visibility_t

Enumeration Type Documentation

◆ method_optimized_type

Enumerator
OPTIMIZED_METHOD_TYPE_SEND 
OPTIMIZED_METHOD_TYPE_CALL 
OPTIMIZED_METHOD_TYPE__MAX 

Definition at line 148 of file method.h.

◆ 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

Definition at line 101 of file method.h.

◆ rb_method_visibility_t

Enumerator
METHOD_VISI_UNDEF 
METHOD_VISI_PUBLIC 
METHOD_VISI_PRIVATE 
METHOD_VISI_PROTECTED 
METHOD_VISI_MASK 

Definition at line 26 of file method.h.

Function Documentation

◆ PACKED_STRUCT_UNALIGNED()

PACKED_STRUCT_UNALIGNED ( struct rb_method_definition_struct { unsigned int type :4;int alias_count :28;int complemented_count :28;union { rb_method_iseq_t iseq;rb_method_cfunc_t cfunc;rb_method_attr_t attr;rb_method_alias_t alias;rb_method_refined_t refined;const VALUE proc;enum method_optimized_type optimize_type;} body;ID original_id;}  )

◆ rb_add_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 625 of file vm_method.c.

Referenced by rb_add_method_cfunc(), rb_add_method_iseq(), and rb_undef_method().

◆ rb_add_method_cfunc()

void rb_add_method_cfunc ( VALUE  klass,
ID  mid,
VALUE(*)(ANYARGS func,
int  argc,
rb_method_visibility_t  visi 
)

◆ rb_add_method_iseq()

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 637 of file vm_method.c.

References rb_add_method(), and VM_METHOD_TYPE_ISEQ.

◆ rb_add_refined_method_entry()

void rb_add_refined_method_entry ( VALUE  refined_class,
ID  mid 
)

Definition at line 456 of file vm_method.c.

◆ rb_callable_method_entry()

const rb_callable_method_entry_t* rb_callable_method_entry ( VALUE  klass,
ID  id 
)

Definition at line 833 of file vm_method.c.

References cache_entry::defined_class.

◆ rb_callable_method_entry_with_refinements()

const rb_callable_method_entry_t* rb_callable_method_entry_with_refinements ( VALUE  klass,
ID  id,
VALUE defined_class 
)

Definition at line 872 of file vm_method.c.

References cache_entry::defined_class.

◆ rb_callable_method_entry_without_refinements()

const rb_callable_method_entry_t* rb_callable_method_entry_without_refinements ( VALUE  klass,
ID  id,
VALUE defined_class 
)

Definition at line 886 of file vm_method.c.

References cache_entry::defined_class.

◆ rb_free_method_entry()

void rb_free_method_entry ( const rb_method_entry_t me)

Definition at line 168 of file vm_method.c.

◆ rb_hash_method_entry()

st_index_t rb_hash_method_entry ( st_index_t  hash,
const rb_method_entry_t me 
)

Definition at line 1519 of file vm_method.c.

◆ rb_method_entry()

const rb_method_entry_t* rb_method_entry ( VALUE  klass,
ID  id 
)

Definition at line 793 of file vm_method.c.

Referenced by rb_method_basic_definition_p().

◆ rb_method_entry_arity()

int rb_method_entry_arity ( const rb_method_entry_t me)

Definition at line 2334 of file proc.c.

◆ rb_method_entry_at()

const rb_method_entry_t* rb_method_entry_at ( VALUE  obj,
ID  id 
)

Definition at line 709 of file vm_method.c.

◆ rb_method_entry_clone()

const rb_method_entry_t* rb_method_entry_clone ( const rb_method_entry_t me)

Definition at line 396 of file vm_method.c.

◆ 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 405 of file vm_method.c.

◆ rb_method_entry_copy()

void rb_method_entry_copy ( rb_method_entry_t dst,
const rb_method_entry_t src 
)

Definition at line 418 of file vm_method.c.

References rb_method_entry_struct::def.

◆ rb_method_entry_create()

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 387 of file vm_method.c.

◆ rb_method_entry_eq()

int rb_method_entry_eq ( const rb_method_entry_t m1,
const rb_method_entry_t m2 
)

Definition at line 1420 of file vm_method.c.

◆ rb_method_entry_location()

VALUE rb_method_entry_location ( const rb_method_entry_t me)

Definition at line 2494 of file proc.c.

References Qnil.

◆ rb_method_entry_set()

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 660 of file vm_method.c.

◆ rb_method_entry_with_refinements()

const rb_method_entry_t* rb_method_entry_with_refinements ( VALUE  klass,
ID  id,
VALUE defined_class 
)

Definition at line 866 of file vm_method.c.

◆ rb_method_entry_without_refinements()

const rb_method_entry_t* rb_method_entry_without_refinements ( VALUE  klass,
ID  id,
VALUE defined_class 
)

Definition at line 880 of file vm_method.c.

Referenced by rb_method_boundp().

◆ rb_mod_method_location()

VALUE rb_mod_method_location ( VALUE  mod,
ID  id 
)

Definition at line 2501 of file proc.c.

Referenced by rb_obj_method_location().

◆ rb_obj_method_location()

VALUE rb_obj_method_location ( VALUE  obj,
ID  id 
)

Definition at line 2508 of file proc.c.

References CLASS_OF, and rb_mod_method_location().

◆ rb_resolve_refined_method()

const rb_method_entry_t* rb_resolve_refined_method ( VALUE  refinements,
const rb_method_entry_t me 
)

Definition at line 940 of file vm_method.c.

◆ rb_resolve_refined_method_callable()

const rb_callable_method_entry_t* rb_resolve_refined_method_callable ( VALUE  refinements,
const rb_callable_method_entry_t me 
)

Definition at line 946 of file vm_method.c.

References rb_callable_method_entry_struct::defined_class.

◆ rb_scope_visibility_set()

void rb_scope_visibility_set ( rb_method_visibility_t  )

Definition at line 1125 of file vm_method.c.

◆ rb_sweep_method_entry()

void rb_sweep_method_entry ( void *  vm)