Ruby 2.7.0p0(2019-12-25revision647ee6f091eafcce70ffb75ddf7e121e192ab217)

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
struct | rb_method_bmethod_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 | 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, 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, 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, OPTIMIZED_METHOD_TYPE_SEND, OPTIMIZED_METHOD_TYPE_CALL, OPTIMIZED_METHOD_TYPE_BLOCK_CALL, OPTIMIZED_METHOD_TYPE__MAX }

## Functions
| STATIC_ASSERT (VM_METHOD_TYPE_MINIMUM_BITS, VM_METHOD_TYPE_REFINED<=(1<< VM_METHOD_TYPE_MINIMUM_BITS))
| STATIC_ASSERT (sizeof_method_def, offsetof(rb_method_definition_t, body)==8)
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)
void | rb_add_method (VALUE klass, ID mid, rb_method_type_t type, void *option, rb_method_visibility_t visi)
rb_method_entry_t * | rb_method_entry_set (VALUE klass, ID mid, const rb_method_entry_t *, rb_method_visibility_t noex)
rb_method_entry_t * | rb_method_entry_create (ID called_id, VALUE klass, rb_method_visibility_t visi, const rb_method_definition_t *def)
const rb_method_entry_t * | rb_method_entry_at (VALUE obj, ID id)
const rb_method_entry_t * | rb_method_entry (VALUE klass, ID id)
const rb_method_entry_t * | rb_method_entry_with_refinements (VALUE klass, ID id, VALUE *defined_class)
const rb_method_entry_t * | rb_method_entry_without_refinements (VALUE klass, ID id, VALUE *defined_class)
const rb_method_entry_t * | rb_resolve_refined_method (VALUE refinements, const rb_method_entry_t *me)
const RUBY_SYMBOL_EXPORT_BEGIN rb_method_entry_t * | rb_resolve_me_location (const rb_method_entry_t *, VALUE[5])
const RUBY_SYMBOL_EXPORT_END rb_callable_method_entry_t * | rb_callable_method_entry (VALUE klass, ID id)
const rb_callable_method_entry_t * | rb_callable_method_entry_with_refinements (VALUE klass, ID id, VALUE *defined_class)
const rb_callable_method_entry_t * | rb_callable_method_entry_without_refinements (VALUE klass, ID id, VALUE *defined_class)
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)
void | rb_free_method_entry (const rb_method_entry_t *me)
const rb_method_entry_t * | rb_method_entry_clone (const rb_method_entry_t *me)
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)
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)
VALUE | rb_unnamed_parameters (int arity)

## 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.

## ◆ 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.

## ◆ rb_iseq_t

#define rb_iseq_t rb_iseq_t

Definition at line 123 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 186 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))

Definition at line 187 of file method.h.

## ◆ VM_METHOD_TYPE_MINIMUM_BITS

#define VM_METHOD_TYPE_MINIMUM_BITS 4

Definition at line 117 of file method.h.

## Typedef Documentation

## ◆ rb_callable_method_entry_t

typedef struct rb_callable_method_entry_struct 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 122 of file method.h.

## ◆ rb_method_alias_t

typedef struct rb_method_alias_struct rb_method_alias_t

## ◆ rb_method_attr_t

typedef struct rb_method_attr_struct rb_method_attr_t

## ◆ rb_method_bmethod_t

typedef struct rb_method_bmethod_struct rb_method_bmethod_t

## ◆ rb_method_cfunc_t

typedef struct rb_method_cfunc_struct rb_method_cfunc_t

## ◆ rb_method_definition_t

typedef struct rb_method_definition_struct rb_method_definition_t

Definition at line 183 of file method.h.

## ◆ rb_method_entry_t

typedef struct rb_method_entry_struct rb_method_entry_t

## ◆ rb_method_iseq_t

typedef struct rb_method_iseq_struct rb_method_iseq_t

## ◆ rb_method_refined_t

typedef struct rb_method_refined_struct rb_method_refined_t

## ◆ rb_scope_visibility_t

typedef struct rb_scope_visi_struct rb_scope_visibility_t

## Enumeration Type Documentation

## ◆ method_optimized_type

enum method_optimized_type

Enumerator
OPTIMIZED_METHOD_TYPE_SEND |
OPTIMIZED_METHOD_TYPE_CALL |
OPTIMIZED_METHOD_TYPE_BLOCK_CALL |
OPTIMIZED_METHOD_TYPE__MAX |
OPTIMIZED_METHOD_TYPE_SEND |
OPTIMIZED_METHOD_TYPE_CALL |
OPTIMIZED_METHOD_TYPE_BLOCK_CALL |
OPTIMIZED_METHOD_TYPE__MAX |

Definition at line 156 of file method.h.

## ◆ rb_method_type_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
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 |

Definition at line 101 of file method.h.

## ◆ rb_method_visibility_t

enum rb_method_visibility_t

Enumerator
METHOD_VISI_UNDEF |
METHOD_VISI_PUBLIC |
METHOD_VISI_PRIVATE |
METHOD_VISI_PROTECTED |
METHOD_VISI_MASK |
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

## ◆ rb_add_method()

void rb_add_method | ( | VALUE | klass,
|  | ID | mid,
|  | rb_method_type_t | type,
|  | void * | option,
|  | rb_method_visibility_t | visi
| ) |  |

Definition at line 674 of file vm_method.c.

Referenced by 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
| ) |  |

Definition at line 134 of file vm_method.c.

References rb_method_cfunc_struct::argc, argc, rb_method_cfunc_struct::func, klass, 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().

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

## ◆ rb_add_refined_method_entry()

void rb_add_refined_method_entry | ( | VALUE | refined_class,
|  | ID | mid
| ) |  |

Definition at line 491 of file vm_method.c.

## ◆ rb_callable_method_entry()

const RUBY_SYMBOL_EXPORT_END rb_callable_method_entry_t* rb_callable_method_entry | ( | VALUE | klass,
|  | ID | id
| ) |  |

Definition at line 878 of file vm_method.c.

Referenced by rb_vm_search_method_slowpath().

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

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

## ◆ rb_free_method_entry()

void rb_free_method_entry | ( | const rb_method_entry_t * | me | ) |

Definition at line 174 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 1575 of file vm_method.c.

## ◆ rb_method_entry()

const rb_method_entry_t* rb_method_entry | ( | VALUE | klass,
|  | ID | id
| ) |  |

Definition at line 837 of file vm_method.c.

## ◆ rb_method_entry_arity()

int rb_method_entry_arity | ( | const rb_method_entry_t * | me | ) |

Definition at line 2543 of file proc.c.

## ◆ rb_method_entry_at()

const rb_method_entry_t* rb_method_entry_at | ( | VALUE | obj,
|  | ID | id
| ) |  |

Definition at line 756 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 406 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 415 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 451 of file vm_method.c.

## ◆ 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 397 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 1476 of file vm_method.c.

## ◆ rb_method_entry_location()

VALUE rb_method_entry_location | ( | const rb_method_entry_t * | me | ) |

Definition at line 2713 of file proc.c.

## ◆ 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 707 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 911 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 925 of file vm_method.c.

## ◆ rb_resolve_me_location()

const RUBY_SYMBOL_EXPORT_BEGIN rb_method_entry_t* rb_resolve_me_location | ( | const rb_method_entry_t * | ,
|  | VALUE | [5]
| ) |  |

Definition at line 5400 of file thread.c.

## ◆ rb_resolve_refined_method()

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

Definition at line 972 of file vm_method.c.

## ◆ rb_scope_visibility_set()

void rb_scope_visibility_set | ( | rb_method_visibility_t |  | ) |

Definition at line 1138 of file vm_method.c.

## ◆ rb_unnamed_parameters()

VALUE rb_unnamed_parameters | ( | int | arity | ) |

Definition at line 1262 of file proc.c.

## ◆ STATIC_ASSERT() [1/2]

STATIC_ASSERT | ( | sizeof_method_def | ,
|  | offsetof(rb_method_definition_t, body) | = `=8`
| ) |  |

## ◆ STATIC_ASSERT() [2/2]

STATIC_ASSERT | ( | VM_METHOD_TYPE_MINIMUM_BITS | ,
|  | VM_METHOD_TYPE_REFINED<= | 1<< VM_METHOD_TYPE_MINIMUM_BITS
| ) |  |

VM_METHOD_TYPE_REFINED
@ VM_METHOD_TYPE_REFINED
refinement
Definition: method.h:113
ruby::backward::cxxanyargs::type
VALUE type(ANYARGS)
ANYARGS-ed function type.
Definition: cxxanyargs.hpp:39
UNDEFINED_METHOD_ENTRY_P
#define UNDEFINED_METHOD_ENTRY_P(me)
Definition: method.h:186