Ruby 3.2.3p157 (2024-01-18 revision 52bb2ac0a6971d0391efa2275f7a66bff319087c)
Data Structures | Macros | Enumerations | Functions | Variables
Classes and their hierarchy.

Data Structures

struct  clone_method_arg
 
struct  clone_const_arg
 
struct  cvc_table_copy_ctx
 
struct  subclass_traverse_data
 
struct  method_entry_arg
 

Macros

#define id_attached   id__attached__
 
#define METACLASS_OF(k)   RBASIC(k)->klass
 
#define SET_METACLASS_OF(k, cls)   RBASIC_SET_CLASS(k, cls)
 
#define META_CLASS_OF_CLASS_CLASS_P(k)   (METACLASS_OF(k) == (k))
 whether k is a meta^(n)-class of Class class
 
#define HAVE_METACLASS_P(k)
 whether k has a metaclass
 
#define ENSURE_EIGENCLASS(klass)    (HAVE_METACLASS_P(klass) ? METACLASS_OF(klass) : make_metaclass(klass))
 ensures klass belongs to its own eigenclass.
 

Enumerations

enum  { RMODULE_ALLOCATED_BUT_NOT_INITIALIZED = RUBY_FL_USER5 }
 If this flag is set, that module is allocated but not initialized yet. More...
 

Functions

static rb_subclass_entry_tpush_subclass_entry_to_list (VALUE super, VALUE klass)
 
void rb_class_subclass_add (VALUE super, VALUE klass)
 
static void rb_module_add_to_subclasses_list (VALUE module, VALUE iclass)
 
void rb_class_remove_subclass_head (VALUE klass)
 
void rb_class_remove_from_super_subclasses (VALUE klass)
 
void rb_class_remove_from_module_subclasses (VALUE klass)
 
void rb_class_foreach_subclass (VALUE klass, void(*f)(VALUE, VALUE), VALUE arg)
 
static void class_detach_subclasses (VALUE klass, VALUE arg)
 
void rb_class_detach_subclasses (VALUE klass)
 
static void class_detach_module_subclasses (VALUE klass, VALUE arg)
 
void rb_class_detach_module_subclasses (VALUE klass)
 
static VALUE class_alloc (VALUE flags, VALUE klass)
 Allocates a struct RClass for a new class.
 
static void RCLASS_M_TBL_INIT (VALUE c)
 
VALUE rb_class_boot (VALUE super)
 A utility function that wraps class_alloc.
 
static VALUEclass_superclasses_including_self (VALUE klass)
 
void rb_class_update_superclasses (VALUE klass)
 
void rb_check_inheritable (VALUE super)
 Asserts that the given class can derive a child class.
 
VALUE rb_class_new (VALUE super)
 Creates a new, anonymous class.
 
VALUE rb_class_s_alloc (VALUE klass)
 
static void clone_method (VALUE old_klass, VALUE new_klass, ID mid, const rb_method_entry_t *me)
 
static enum rb_id_table_iterator_result clone_method_i (ID key, VALUE value, void *data)
 
static int clone_const (ID key, const rb_const_entry_t *ce, struct clone_const_arg *arg)
 
static enum rb_id_table_iterator_result clone_const_i (ID key, VALUE value, void *data)
 
static void class_init_copy_check (VALUE clone, VALUE orig)
 
static enum rb_id_table_iterator_result cvc_table_copy (ID id, VALUE val, void *data)
 
static void copy_tables (VALUE clone, VALUE orig)
 
static bool ensure_origin (VALUE klass)
 
static bool RMODULE_UNINITIALIZED (VALUE module)
 
void rb_module_set_initialized (VALUE mod)
 
void rb_module_check_initializable (VALUE mod)
 
VALUE rb_mod_init_copy (VALUE clone, VALUE orig)
 The comment that comes with this function says :nodoc:.
 
VALUE rb_singleton_class_clone (VALUE obj)
 Clones a singleton class.
 
VALUE rb_singleton_class_clone_and_attach (VALUE obj, VALUE attach)
 
void rb_singleton_class_attached (VALUE klass, VALUE obj)
 Attaches a singleton class to its corresponding object.
 
static int rb_singleton_class_has_metaclass_p (VALUE sklass)
 
int rb_singleton_class_internal_p (VALUE sklass)
 
static VALUE make_metaclass (VALUE klass)
 Creates a metaclass of klass.
 
static VALUE make_singleton_class (VALUE obj)
 Creates a singleton class for obj.
 
static VALUE boot_defclass (const char *name, VALUE super)
 
void Init_class_hierarchy (void)
 Internal header aggregating init functions.
 
VALUE rb_make_metaclass (VALUE obj, VALUE unused)
 
VALUE rb_define_class_id (ID id, VALUE super)
 This is a very badly designed API that creates an anonymous class.
 
VALUE rb_class_inherited (VALUE super, VALUE klass)
 Calls Class::inherited.
 
VALUE rb_define_class (const char *name, VALUE super)
 Defines a top-level class.
 
VALUE rb_define_class_under (VALUE outer, const char *name, VALUE super)
 Defines a class under the namespace of outer.
 
VALUE rb_define_class_id_under (VALUE outer, ID id, VALUE super)
 Identical to rb_define_class_under(), except it takes the name in ID instead of C's string.
 
VALUE rb_module_s_alloc (VALUE klass)
 
static VALUE module_new (VALUE klass)
 
VALUE rb_module_new (void)
 Creates a new, anonymous module.
 
VALUE rb_refinement_new (void)
 Creates a new, anonymous refinement.
 
VALUE rb_define_module_id (ID id)
 This is a very badly designed API that creates an anonymous module.
 
VALUE rb_define_module (const char *name)
 Defines a top-level module.
 
VALUE rb_define_module_under (VALUE outer, const char *name)
 Defines a module under the namespace of outer.
 
VALUE rb_define_module_id_under (VALUE outer, ID id)
 Identical to rb_define_module_under(), except it takes the name in ID instead of C's string.
 
VALUE rb_include_class_new (VALUE module, VALUE super)
 
static int include_modules_at (const VALUE klass, VALUE c, VALUE module, int search_super)
 
static void ensure_includable (VALUE klass, VALUE module)
 
void rb_include_module (VALUE klass, VALUE module)
 Includes a module to a class.
 
static enum rb_id_table_iterator_result add_refined_method_entry_i (ID key, VALUE value, void *data)
 
static enum rb_id_table_iterator_result clear_module_cache_i (ID id, VALUE val, void *data)
 
static bool module_in_super_chain (const VALUE klass, VALUE module)
 
static enum rb_id_table_iterator_result clear_constant_cache_i (ID id, VALUE value, void *data)
 
static int do_include_modules_at (const VALUE klass, VALUE c, VALUE module, int search_super, bool check_cyclic)
 
static enum rb_id_table_iterator_result move_refined_method (ID key, VALUE value, void *data)
 
static enum rb_id_table_iterator_result cache_clear_refined_method (ID key, VALUE value, void *data)
 
void rb_prepend_module (VALUE klass, VALUE module)
 Identical to rb_include_module(), except it "prepends" the passed module to the klass, instead of includes.
 
VALUE rb_mod_included_modules (VALUE mod)
 Queries the list of included modules.
 
VALUE rb_mod_include_p (VALUE mod, VALUE mod2)
 Queries if the passed module is included by the module.
 
VALUE rb_mod_ancestors (VALUE mod)
 Queries the module's ancestors.
 
static void class_descendants_recursive (VALUE klass, VALUE v)
 
static VALUE class_descendants (VALUE klass, bool immediate_only)
 
VALUE rb_class_subclasses (VALUE klass)
 Queries the class's direct descendants.
 
VALUE rb_class_attached_object (VALUE klass)
 Returns the attached object for a singleton class.
 
static void ins_methods_push (st_data_t name, st_data_t ary)
 
static int ins_methods_i (st_data_t name, st_data_t type, st_data_t ary)
 
static int ins_methods_type_i (st_data_t name, st_data_t type, st_data_t ary, rb_method_visibility_t visi)
 
static int ins_methods_prot_i (st_data_t name, st_data_t type, st_data_t ary)
 
static int ins_methods_priv_i (st_data_t name, st_data_t type, st_data_t ary)
 
static int ins_methods_pub_i (st_data_t name, st_data_t type, st_data_t ary)
 
static int ins_methods_undef_i (st_data_t name, st_data_t type, st_data_t ary)
 
static enum rb_id_table_iterator_result method_entry_i (ID key, VALUE value, void *data)
 
static void add_instance_method_list (VALUE mod, struct method_entry_arg *me_arg)
 
static bool particular_class_p (VALUE mod)
 
static VALUE class_instance_method_list (int argc, const VALUE *argv, VALUE mod, int obj, int(*func)(st_data_t, st_data_t, st_data_t))
 
VALUE rb_class_instance_methods (int argc, const VALUE *argv, VALUE mod)
 Generates an array of symbols, which are the list of method names defined in the passed class.
 
VALUE rb_class_protected_instance_methods (int argc, const VALUE *argv, VALUE mod)
 Identical to rb_class_instance_methods(), except it returns names of methods that are protected only.
 
VALUE rb_class_private_instance_methods (int argc, const VALUE *argv, VALUE mod)
 Identical to rb_class_instance_methods(), except it returns names of methods that are private only.
 
VALUE rb_class_public_instance_methods (int argc, const VALUE *argv, VALUE mod)
 Identical to rb_class_instance_methods(), except it returns names of methods that are public only.
 
VALUE rb_class_undefined_instance_methods (VALUE mod)
 
VALUE rb_obj_methods (int argc, const VALUE *argv, VALUE obj)
 
VALUE rb_obj_protected_methods (int argc, const VALUE *argv, VALUE obj)
 
VALUE rb_obj_private_methods (int argc, const VALUE *argv, VALUE obj)
 
VALUE rb_obj_public_methods (int argc, const VALUE *argv, VALUE obj)
 
VALUE rb_obj_singleton_methods (int argc, const VALUE *argv, VALUE obj)
 Identical to rb_class_instance_methods(), except it returns names of singleton methods instead of instance methods.
 
static VALUE special_singleton_class_of (VALUE obj)
 
VALUE rb_special_singleton_class (VALUE obj)
 
static VALUE singleton_class_of (VALUE obj)
 
void rb_freeze_singleton_class (VALUE x)
 This is an implementation detail of RB_OBJ_FREEZE().
 
VALUE rb_singleton_class_get (VALUE obj)
 Returns the singleton class of obj, or nil if obj is not a singleton object.
 
VALUE rb_singleton_class (VALUE obj)
 Finds or creates the singleton class of the passed object.
 
void rb_class_modify_check (VALUE klass)
 Asserts that klass is not a frozen class.
 
void rb_extend_object (VALUE obj, VALUE mod)
 Extend the object with the module.
 

Variables

rb_serial_t ruby_vm_global_cvar_state
 

Detailed Description

Terminology
  • class: same as in Ruby.
  • singleton class: class for a particular object.
  • eigenclass: = singleton class
  • metaclass: class of a class. Metaclass is a kind of singleton class.
  • metametaclass: class of a metaclass.
  • meta^(n)-class: class of a meta^(n-1)-class.
  • attached object: A singleton class knows its unique instance. The instance is called the attached object for the singleton class.

Macro Definition Documentation

◆ ENSURE_EIGENCLASS

#define ENSURE_EIGENCLASS ( klass)     (HAVE_METACLASS_P(klass) ? METACLASS_OF(klass) : make_metaclass(klass))

ensures klass belongs to its own eigenclass.

Returns
the eigenclass of klass
Postcondition
klass belongs to the returned eigenclass. i.e. the attached object of the eigenclass is klass.
Note
this macro creates a new eigenclass if necessary.

Definition at line 715 of file class.c.

Referenced by Init_class_hierarchy(), make_metaclass(), and rb_singleton_class().

◆ HAVE_METACLASS_P

#define HAVE_METACLASS_P ( k)
Value:
(FL_TEST(METACLASS_OF(k), FL_SINGLETON) && \
rb_singleton_class_has_metaclass_p(k))
#define FL_SINGLETON
Old name of RUBY_FL_SINGLETON.
Definition fl_type.h:58
#define FL_TEST
Old name of RB_FL_TEST.
Definition fl_type.h:139

whether k has a metaclass

Return values
1if k has a metaclass
0otherwise

Definition at line 704 of file class.c.

◆ id_attached

#define id_attached   id__attached__

Definition at line 33 of file class.c.

◆ META_CLASS_OF_CLASS_CLASS_P

#define META_CLASS_OF_CLASS_CLASS_P ( k)    (METACLASS_OF(k) == (k))

whether k is a meta^(n)-class of Class class

Return values
1if k is a meta^(n)-class of Class class (n >= 0)
0otherwise

Definition at line 684 of file class.c.

Referenced by make_metaclass().

◆ METACLASS_OF

#define METACLASS_OF ( k)    RBASIC(k)->klass

Definition at line 35 of file class.c.

◆ SET_METACLASS_OF

#define SET_METACLASS_OF ( k,
cls )   RBASIC_SET_CLASS(k, cls)

Definition at line 36 of file class.c.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

If this flag is set, that module is allocated but not initialized yet.

Definition at line 473 of file class.c.

Function Documentation

◆ add_instance_method_list()

static void add_instance_method_list ( VALUE mod,
struct method_entry_arg * me_arg )
static

Definition at line 1751 of file class.c.

◆ add_refined_method_entry_i()

static enum rb_id_table_iterator_result add_refined_method_entry_i ( ID key,
VALUE value,
void * data )
static

Definition at line 1170 of file class.c.

◆ boot_defclass()

static VALUE boot_defclass ( const char * name,
VALUE super )
static

Definition at line 779 of file class.c.

◆ cache_clear_refined_method()

static enum rb_id_table_iterator_result cache_clear_refined_method ( ID key,
VALUE value,
void * data )
static

Definition at line 1347 of file class.c.

◆ class_alloc()

static VALUE class_alloc ( VALUE flags,
VALUE klass )
static

Allocates a struct RClass for a new class.

Parameters
flagsinitial value for basic.flags of the returned class.
klassthe class of the returned class.
Returns
an uninitialized Class object.
Precondition
klass must refer Class class or an ancestor of Class.
(flags | T_CLASS) != 0
#define T_CLASS
Old name of RUBY_T_CLASS.
Definition value_type.h:58
Postcondition
the returned class can safely be #initialize 'd.
Note
this function is not Class::allocate.

Definition at line 196 of file class.c.

Referenced by rb_class_boot(), and rb_mod_init_copy().

◆ class_descendants()

static VALUE class_descendants ( VALUE klass,
bool immediate_only )
static

Definition at line 1570 of file class.c.

◆ class_descendants_recursive()

static void class_descendants_recursive ( VALUE klass,
VALUE v )
static

Definition at line 1550 of file class.c.

◆ class_detach_module_subclasses()

static void class_detach_module_subclasses ( VALUE klass,
VALUE arg )
static

Definition at line 172 of file class.c.

◆ class_detach_subclasses()

static void class_detach_subclasses ( VALUE klass,
VALUE arg )
static

Definition at line 160 of file class.c.

◆ class_init_copy_check()

static void class_init_copy_check ( VALUE clone,
VALUE orig )
static

Definition at line 394 of file class.c.

◆ class_instance_method_list()

static VALUE class_instance_method_list ( int argc,
const VALUE * argv,
VALUE mod,
int obj,
int(*)(st_data_t, st_data_t, st_data_t) func )
static

Definition at line 1768 of file class.c.

◆ class_superclasses_including_self()

static VALUE * class_superclasses_including_self ( VALUE klass)
static

Definition at line 258 of file class.c.

◆ clear_constant_cache_i()

static enum rb_id_table_iterator_result clear_constant_cache_i ( ID id,
VALUE value,
void * data )
static

Definition at line 1201 of file class.c.

◆ clear_module_cache_i()

static enum rb_id_table_iterator_result clear_module_cache_i ( ID id,
VALUE val,
void * data )
static

Definition at line 1177 of file class.c.

◆ clone_const()

static int clone_const ( ID key,
const rb_const_entry_t * ce,
struct clone_const_arg * arg )
static

Definition at line 376 of file class.c.

◆ clone_const_i()

static enum rb_id_table_iterator_result clone_const_i ( ID key,
VALUE value,
void * data )
static

Definition at line 388 of file class.c.

◆ clone_method()

static void clone_method ( VALUE old_klass,
VALUE new_klass,
ID mid,
const rb_method_entry_t * me )
static

Definition at line 345 of file class.c.

◆ clone_method_i()

static enum rb_id_table_iterator_result clone_method_i ( ID key,
VALUE value,
void * data )
static

Definition at line 363 of file class.c.

◆ copy_tables()

static void copy_tables ( VALUE clone,
VALUE orig )
static

Definition at line 432 of file class.c.

◆ cvc_table_copy()

static enum rb_id_table_iterator_result cvc_table_copy ( ID id,
VALUE val,
void * data )
static

Definition at line 413 of file class.c.

◆ do_include_modules_at()

static int do_include_modules_at ( const VALUE klass,
VALUE c,
VALUE module,
int search_super,
bool check_cyclic )
static

Definition at line 1208 of file class.c.

◆ ensure_includable()

static void ensure_includable ( VALUE klass,
VALUE module )
static

Definition at line 1114 of file class.c.

◆ ensure_origin()

static bool ensure_origin ( VALUE klass)
static

Definition at line 1362 of file class.c.

◆ include_modules_at()

static int include_modules_at ( const VALUE klass,
VALUE c,
VALUE module,
int search_super )
static

Definition at line 1314 of file class.c.

◆ Init_class_hierarchy()

void Init_class_hierarchy ( void )

Internal header aggregating init functions.

Author
Ruby developers ruby-.nosp@m.core.nosp@m.@ruby.nosp@m.-lan.nosp@m.g.org

Definition at line 842 of file class.c.

◆ ins_methods_i()

static int ins_methods_i ( st_data_t name,
st_data_t type,
st_data_t ary )
static

Definition at line 1673 of file class.c.

◆ ins_methods_priv_i()

static int ins_methods_priv_i ( st_data_t name,
st_data_t type,
st_data_t ary )
static

Definition at line 1702 of file class.c.

◆ ins_methods_prot_i()

static int ins_methods_prot_i ( st_data_t name,
st_data_t type,
st_data_t ary )
static

Definition at line 1696 of file class.c.

◆ ins_methods_pub_i()

static int ins_methods_pub_i ( st_data_t name,
st_data_t type,
st_data_t ary )
static

Definition at line 1708 of file class.c.

◆ ins_methods_push()

static void ins_methods_push ( st_data_t name,
st_data_t ary )
static

Definition at line 1667 of file class.c.

◆ ins_methods_type_i()

static int ins_methods_type_i ( st_data_t name,
st_data_t type,
st_data_t ary,
rb_method_visibility_t visi )
static

Definition at line 1687 of file class.c.

◆ ins_methods_undef_i()

static int ins_methods_undef_i ( st_data_t name,
st_data_t type,
st_data_t ary )
static

Definition at line 1714 of file class.c.

◆ make_metaclass()

static VALUE make_metaclass ( VALUE klass)
inlinestatic

Creates a metaclass of klass.

Parameters
klassa class
Returns
created metaclass for the class
Precondition
klass is a Class object
klass has no singleton class.
Postcondition
the class of klass is the returned class.
the returned class is meta^(n+1)-class when klass is a meta^(n)-klass for n >= 0

Definition at line 729 of file class.c.

◆ make_singleton_class()

static VALUE make_singleton_class ( VALUE obj)
inlinestatic

Creates a singleton class for obj.

Precondition
obj must not a immediate nor a special const.
obj must not a Class object.
obj has no singleton class.

Definition at line 764 of file class.c.

◆ method_entry_i()

static enum rb_id_table_iterator_result method_entry_i ( ID key,
VALUE value,
void * data )
static

Definition at line 1725 of file class.c.

◆ module_in_super_chain()

static bool module_in_super_chain ( const VALUE klass,
VALUE module )
static

Definition at line 1185 of file class.c.

◆ module_new()

static VALUE module_new ( VALUE klass)
inlinestatic

Definition at line 1006 of file class.c.

◆ move_refined_method()

static enum rb_id_table_iterator_result move_refined_method ( ID key,
VALUE value,
void * data )
static

Definition at line 1320 of file class.c.

◆ particular_class_p()

static bool particular_class_p ( VALUE mod)
static

Definition at line 1759 of file class.c.

◆ push_subclass_entry_to_list()

static rb_subclass_entry_t * push_subclass_entry_to_list ( VALUE super,
VALUE klass )
static

Definition at line 41 of file class.c.

◆ rb_check_inheritable()

void rb_check_inheritable ( VALUE super)

Asserts that the given class can derive a child class.

A class might or might not be able to do so; for instance a singleton class cannot.

Parameters
[in]superPossible super class.
Exceptions
rb_eTypeErrorNo it cannot.
Postcondition
Upon successful return super can derive.

Definition at line 310 of file class.c.

Referenced by rb_class_new().

◆ rb_class_attached_object()

VALUE rb_class_attached_object ( VALUE klass)

Returns the attached object for a singleton class.

If the given class is not a singleton class, raises a TypeError.

Parameters
[in]klassA class.
Returns
The object which has the singleton class klass.

Definition at line 1657 of file class.c.

◆ rb_class_boot()

VALUE rb_class_boot ( VALUE super)

A utility function that wraps class_alloc.

allocates a class and initializes safely.

Parameters
supera class from which the new class derives.
Returns
a class object.
Precondition
super must be a class.
Postcondition
the metaclass of the new class is Class.

Definition at line 247 of file class.c.

Referenced by make_metaclass(), make_singleton_class(), and rb_class_new().

◆ rb_class_detach_module_subclasses()

void rb_class_detach_module_subclasses ( VALUE klass)

Definition at line 178 of file class.c.

◆ rb_class_detach_subclasses()

void rb_class_detach_subclasses ( VALUE klass)

Definition at line 166 of file class.c.

◆ rb_class_foreach_subclass()

void rb_class_foreach_subclass ( VALUE klass,
void(*)(VALUE, VALUE) f,
VALUE arg )

Definition at line 137 of file class.c.

◆ rb_class_inherited()

VALUE rb_class_inherited ( VALUE super,
VALUE klass )

Calls Class::inherited.

Parameters
superA class which will be called #inherited. NULL means Object class.
klassA Class object which derived from super
Returns
the value Class::inherited's returns
Precondition
Each of super and klass must be a Class object.

Definition at line 914 of file class.c.

Referenced by rb_define_class(), and rb_define_class_id_under().

◆ rb_class_instance_methods()

VALUE rb_class_instance_methods ( int argc,
const VALUE * argv,
VALUE mod )

Generates an array of symbols, which are the list of method names defined in the passed class.

Parameters
[in]argcNumber of objects of argv.
[in]argvArray of at most one object, which controls (if any) whether the return array includes the names of methods defined in ancestors or not.
[in]modA module or a class.
Exceptions
rb_eArgError`argc` out of range.
Returns
An array of symbols collecting names of instance methods that are not private, defined at mod.

Definition at line 1839 of file class.c.

◆ rb_class_modify_check()

void rb_class_modify_check ( VALUE klass)

Asserts that klass is not a frozen class.

Parameters
[in]klassa Module object
Exceptions
RuntimeErrorif klass is not a class or frozen.

Definition at line 431 of file eval.c.

Referenced by rb_alias(), rb_deprecate_constant(), and rb_undef().

◆ rb_class_new()

VALUE rb_class_new ( VALUE super)

Creates a new, anonymous class.

Parameters
[in]superWhat would become a parent class.
Exceptions
rb_eTypeError`super` is not something inheritable.
Returns
An anonymous class that inherits super.

Definition at line 325 of file class.c.

Referenced by rb_define_class_id().

◆ rb_class_private_instance_methods()

VALUE rb_class_private_instance_methods ( int argc,
const VALUE * argv,
VALUE mod )

Identical to rb_class_instance_methods(), except it returns names of methods that are private only.

Parameters
[in]argcNumber of objects of argv.
[in]argvArray of at most one object, which controls (if any) whether the return array includes the names of methods defined in ancestors or not.
[in]modA module or a class.
Exceptions
rb_eArgError`argc` out of range.
Returns
An array of symbols collecting names of instance methods that are protected, defined at mod.

Definition at line 1877 of file class.c.

◆ rb_class_protected_instance_methods()

VALUE rb_class_protected_instance_methods ( int argc,
const VALUE * argv,
VALUE mod )

Identical to rb_class_instance_methods(), except it returns names of methods that are protected only.

Parameters
[in]argcNumber of objects of argv.
[in]argvArray of at most one object, which controls (if any) whether the return array includes the names of methods defined in ancestors or not.
[in]modA module or a class.
Exceptions
rb_eArgError`argc` out of range.
Returns
An array of symbols collecting names of instance methods that are protected, defined at mod.

Definition at line 1854 of file class.c.

◆ rb_class_public_instance_methods()

VALUE rb_class_public_instance_methods ( int argc,
const VALUE * argv,
VALUE mod )

Identical to rb_class_instance_methods(), except it returns names of methods that are public only.

Parameters
[in]argcNumber of objects of argv.
[in]argvArray of at most one object, which controls (if any) whether the return array includes the names of methods defined in ancestors or not.
[in]modA module or a class.
Exceptions
rb_eArgError`argc` out of range.
Returns
An array of symbols collecting names of instance methods that are public, defined at mod.

Definition at line 1892 of file class.c.

◆ rb_class_remove_from_module_subclasses()

void rb_class_remove_from_module_subclasses ( VALUE klass)

Definition at line 116 of file class.c.

◆ rb_class_remove_from_super_subclasses()

void rb_class_remove_from_super_subclasses ( VALUE klass)

Definition at line 95 of file class.c.

◆ rb_class_remove_subclass_head()

void rb_class_remove_subclass_head ( VALUE klass)

Definition at line 81 of file class.c.

◆ rb_class_s_alloc()

VALUE rb_class_s_alloc ( VALUE klass)

Definition at line 339 of file class.c.

◆ rb_class_subclass_add()

void rb_class_subclass_add ( VALUE super,
VALUE klass )

Definition at line 65 of file class.c.

◆ rb_class_subclasses()

VALUE rb_class_subclasses ( VALUE klass)

Queries the class's direct descendants.

This routine gathers classes that are direct subclasses of the given class, returning an array of classes that have the given class as a superclass. The returned array does not include singleton classes.

Parameters
[in]klassA class.
Returns
An array of classes where klass is the superclass.

Definition at line 1634 of file class.c.

◆ rb_class_undefined_instance_methods()

VALUE rb_class_undefined_instance_methods ( VALUE mod)

Definition at line 1906 of file class.c.

◆ rb_class_update_superclasses()

void rb_class_update_superclasses ( VALUE klass)

Definition at line 275 of file class.c.

◆ rb_define_class()

VALUE rb_define_class ( const char * name,
VALUE super )

Defines a top-level class.

Parameters
[in]nameName of the class.
[in]superA class from which the new class will derive.
Exceptions
rb_eTypeErrorThe constant name `name` is already taken but the constant is not a class.
rb_eTypeErrorThe class is already defined but the class can not be reopened because its superclass is not super.
rb_eArgError`super` is NULL.
Returns
The created class.
Postcondition
Top-level constant named name refers the returned class.
Note
If a class named name is already defined and its superclass is super, the function just returns the defined class.
The compaction GC does not move classes returned by this function.

Definition at line 923 of file class.c.

◆ rb_define_class_id()

VALUE rb_define_class_id ( ID id,
VALUE super )

This is a very badly designed API that creates an anonymous class.

Parameters
[in]idDiscarded for no reason (why...).
[in]superWhat would become a parent class. 0 means rb_cObject.
Exceptions
rb_eTypeError`super` is not something inheritable.
Returns
An anonymous class that inherits super.
Warning
You must explicitly name the return value.

Definition at line 893 of file class.c.

Referenced by rb_define_class(), and rb_define_class_id_under().

◆ rb_define_class_id_under()

VALUE rb_define_class_id_under ( VALUE outer,
ID id,
VALUE super )

Identical to rb_define_class_under(), except it takes the name in ID instead of C's string.

Parameters
[out]outerA class which contains the new class.
[in]idName of the new class
[in]superA class from which the new class will derive. 0 means rb_cObject.
Exceptions
rb_eTypeErrorThe constant name `id` is already taken but the constant is not a class.
rb_eTypeErrorThe class is already defined but the class can not be reopened because its superclass is not super.
rb_eArgError`super` is NULL.
Returns
The created class.
Postcondition
outer::id refers the returned class.
Note
If a class named id is already defined and its superclass is super, the function just returns the defined class.
The compaction GC does not move classes returned by this function.

Definition at line 961 of file class.c.

Referenced by rb_define_class_under().

◆ rb_define_class_under()

VALUE rb_define_class_under ( VALUE outer,
const char * name,
VALUE super )

Defines a class under the namespace of outer.

Parameters
[out]outerA class which contains the new class.
[in]nameName of the new class
[in]superA class from which the new class will derive. 0 means rb_cObject.
Exceptions
rb_eTypeErrorThe constant name `name` is already taken but the constant is not a class.
rb_eTypeErrorThe class is already defined but the class can not be reopened because its superclass is not super.
rb_eArgError`super` is NULL.
Returns
The created class.
Postcondition
outer::name refers the returned class.
Note
If a class named name is already defined and its superclass is super, the function just returns the defined class.
The compaction GC does not move classes returned by this function.

Definition at line 955 of file class.c.

Referenced by rb_struct_define_under().

◆ rb_define_module()

VALUE rb_define_module ( const char * name)

Defines a top-level module.

Parameters
[in]nameName of the module.
Exceptions
rb_eTypeErrorThe constant name `name` is already taken but the constant is not a module.
Returns
The created module.
Postcondition
Top-level constant named name refers the returned module.
Note
The compaction GC does not move classes returned by this function.

Definition at line 1033 of file class.c.

◆ rb_define_module_id()

VALUE rb_define_module_id ( ID id)

This is a very badly designed API that creates an anonymous module.

Parameters
[in]idDiscarded for no reason (why...).
Returns
An anonymous module.
Warning
You must explicitly name the return value.

Definition at line 1027 of file class.c.

◆ rb_define_module_id_under()

VALUE rb_define_module_id_under ( VALUE outer,
ID id )

Identical to rb_define_module_under(), except it takes the name in ID instead of C's string.

Parameters
[out]outerA class which contains the new module.
[in]idName of the new module
Exceptions
rb_eTypeErrorThe constant name `id` is already taken but the constant is not a module.
Returns
The created module.
Postcondition
outer::id refers the returned module.
Note
The compaction GC does not move classes returned by this function.

Definition at line 1063 of file class.c.

Referenced by rb_define_module_under().

◆ rb_define_module_under()

VALUE rb_define_module_under ( VALUE outer,
const char * name )

Defines a module under the namespace of outer.

Parameters
[out]outerA class which contains the new module.
[in]nameName of the new module
Exceptions
rb_eTypeErrorThe constant name `name` is already taken but the constant is not a class.
Returns
The created module.
Postcondition
outer::name refers the returned module.
Note
The compaction GC does not move classes returned by this function.

Definition at line 1057 of file class.c.

◆ rb_extend_object()

void rb_extend_object ( VALUE obj,
VALUE mod )

Extend the object with the module.

Warning
This is the same as Module#extend_object, not Object#extend! These two methods are very similar, but not identical. The difference is the hook. Module#extend_object does not invoke Module#extended, while Object#extend does.
Parameters
[out]objObject to extend.
[in]modModule of extension.

Definition at line 1693 of file eval.c.

Referenced by rb_eval_string_wrap().

◆ rb_freeze_singleton_class()

void rb_freeze_singleton_class ( VALUE klass)

This is an implementation detail of RB_OBJ_FREEZE().

People don't use it directly.

Parameters
[out]klassA singleton class.
Postcondition
klass gets frozen.

Definition at line 2202 of file class.c.

Referenced by rb_obj_freeze_inline().

◆ rb_include_class_new()

VALUE rb_include_class_new ( VALUE module,
VALUE super )

Definition at line 1087 of file class.c.

◆ rb_include_module()

void rb_include_module ( VALUE klass,
VALUE module )

Includes a module to a class.

Parameters
[out]klassInclusion destination.
[in]moduleInclusion source.
Exceptions
rb_eArgErrorCyclic inclusion.

Definition at line 1125 of file class.c.

Referenced by rb_extend_object().

◆ rb_make_metaclass()

VALUE rb_make_metaclass ( VALUE obj,
VALUE unused )

Definition at line 882 of file class.c.

◆ rb_mod_ancestors()

VALUE rb_mod_ancestors ( VALUE mod)

Queries the module's ancestors.

This routine gathers classes and modules that the passed module either inherits, includes, or prepends, then recursively applies that routine again and again to the collected entries until the list doesn't grow up.

Parameters
[in]modA module or a class.
Returns
An array of classes or modules that mod possibly recursively inherits, includes, or prepends.

Definition at line 1520 of file class.c.

◆ rb_mod_include_p()

VALUE rb_mod_include_p ( VALUE child,
VALUE parent )

Queries if the passed module is included by the module.

It can also be seen as a routine to first call rb_mod_included_modules(), then see if the return value contains the passed module.

Parameters
[in]childA Module.
[in]parentAnother Module.
Exceptions
rb_eTypeError`child` is not an instance of rb_cModule.
Return values
RUBY_Qtrueparent is either included or prepended in any of child's ancestry tree (including itself).
Returns
RUBY_Qfalse Otherwise.

Definition at line 1488 of file class.c.

◆ rb_mod_included_modules()

VALUE rb_mod_included_modules ( VALUE mod)

Queries the list of included modules.

It can also be seen as a routine to first call rb_mod_ancestors(), then rejects non-modules from the return value.

Parameters
[in]modClass or Module.
Returns
An array of modules that are either included or prepended in any of mod's ancestry tree (including itself).

Definition at line 1452 of file class.c.

◆ rb_mod_init_copy()

VALUE rb_mod_init_copy ( VALUE clone,
VALUE orig )

The comment that comes with this function says :nodoc:.

Not sure what that means though.

Parameters
[out]cloneDestination object.
[in]origSource object.
Exceptions
rb_eTypeErrorCannot copy `orig`.
Returns
The passed clone.

Definition at line 498 of file class.c.

◆ rb_module_add_to_subclasses_list()

static void rb_module_add_to_subclasses_list ( VALUE module,
VALUE iclass )
static

Definition at line 74 of file class.c.

◆ rb_module_check_initializable()

void rb_module_check_initializable ( VALUE mod)

Definition at line 489 of file class.c.

◆ rb_module_new()

VALUE rb_module_new ( void )

Creates a new, anonymous module.

Returns
An anonymous module.

Definition at line 1014 of file class.c.

Referenced by rb_define_module_id(), and rb_eval_string_wrap().

◆ rb_module_s_alloc()

VALUE rb_module_s_alloc ( VALUE klass)

Definition at line 997 of file class.c.

◆ rb_module_set_initialized()

void rb_module_set_initialized ( VALUE mod)

Definition at line 482 of file class.c.

◆ rb_obj_methods()

VALUE rb_obj_methods ( int argc,
const VALUE * argv,
VALUE obj )

Definition at line 1943 of file class.c.

◆ rb_obj_private_methods()

VALUE rb_obj_private_methods ( int argc,
const VALUE * argv,
VALUE obj )

Definition at line 1977 of file class.c.

◆ rb_obj_protected_methods()

VALUE rb_obj_protected_methods ( int argc,
const VALUE * argv,
VALUE obj )

Definition at line 1962 of file class.c.

◆ rb_obj_public_methods()

VALUE rb_obj_public_methods ( int argc,
const VALUE * argv,
VALUE obj )

Definition at line 1992 of file class.c.

◆ rb_obj_singleton_methods()

VALUE rb_obj_singleton_methods ( int argc,
const VALUE * argv,
VALUE obj )

Identical to rb_class_instance_methods(), except it returns names of singleton methods instead of instance methods.

Parameters
[in]argcNumber of objects of argv.
[in]argvArray of at most one object, which controls (if any) whether the return array includes the names of methods defined in ancestors or not.
[in]objArbitrary ruby object.
Exceptions
rb_eArgError`argc` out of range.
Returns
An array of symbols collecting names of instance methods that are not private, defined at the singleton class of obj.

Definition at line 2031 of file class.c.

◆ rb_prepend_module()

void rb_prepend_module ( VALUE klass,
VALUE module )

Identical to rb_include_module(), except it "prepends" the passed module to the klass, instead of includes.

This affects how super resolves. For instance:

class Q; def foo; "<q/>" end end
module W; def foo; "<w>#{super}</w>" end end
class E < Q; include W; def foo; "<e>#{super}</e>" end end
class R < Q; prepend W; def foo; "<r>#{super}</r>" end end
E.new.foo # => "<e><w><q/></w></e>"
r.new.foo # => "<W><r><q/></r></w>"
Parameters
[out]klassTarget class to modify.
[in]moduleModule to prepend.
Exceptions
rb_eArgErrorCyclic inclusion.

Definition at line 1380 of file class.c.

◆ rb_refinement_new()

VALUE rb_refinement_new ( void )

Creates a new, anonymous refinement.

Returns
An anonymous refinement.

Definition at line 1020 of file class.c.

◆ rb_singleton_class()

VALUE rb_singleton_class ( VALUE obj)

Finds or creates the singleton class of the passed object.

Parameters
[out]objArbitrary ruby object.
Exceptions
rb_eTypeError`obj` cannot have its singleton class.
Returns
A (possibly newly allocated) instance of rb_cClass.
Postcondition
obj has its singleton class, which is the return value.
In case obj is a class, the returned singleton class also has its own singleton class in order to keep consistency of the inheritance structure of metaclasses.
Note
A new singleton class will be created if obj did not have one.
The singleton classes for RUBY_Qnil, RUBY_Qtrue, and RUBY_Qfalse are rb_cNilClass, rb_cTrueClass, and rb_cFalseClass respectively.

Definition at line 2236 of file class.c.

Referenced by rb_extend_object(), and rb_obj_singleton_methods().

◆ rb_singleton_class_attached()

void rb_singleton_class_attached ( VALUE klass,
VALUE obj )

Attaches a singleton class to its corresponding object.

This is basically an implementation detail of rb_clone_setup(). People need not be aware of this working behind-the-scene.

Parameters
[in]klassThe singleton class.
[out]objThe object to attach a class.
Precondition
The passed two objects must agree with each other that klass becomes a singleton class of obj.
Postcondition
klass becomes the singleton class of obj.

Definition at line 672 of file class.c.

Referenced by make_metaclass(), make_singleton_class(), and rb_mod_init_copy().

◆ rb_singleton_class_clone()

VALUE rb_singleton_class_clone ( VALUE obj)

Clones a singleton class.

An object can have its own singleton class. OK. Then what happens when a program clones such object? The singleton class that is attached to the source object must also be cloned. Otherwise a singleton object gets shared with two objects, which breaks "singleton"-ness of such class.

This is basically an implementation detail of rb_clone_setup(). People need not be aware of this working behind-the-scene.

Parameters
[in]objThe object that has its own singleton class.
Returns
Cloned singleton class.

Definition at line 607 of file class.c.

Referenced by rb_mod_init_copy().

◆ rb_singleton_class_clone_and_attach()

VALUE rb_singleton_class_clone_and_attach ( VALUE obj,
VALUE attach )

Definition at line 614 of file class.c.

◆ rb_singleton_class_get()

VALUE rb_singleton_class_get ( VALUE obj)

Returns the singleton class of obj, or nil if obj is not a singleton object.

Parameters
objan arbitrary object.
Returns
the singleton class or nil.

Definition at line 2222 of file class.c.

◆ rb_singleton_class_has_metaclass_p()

static int rb_singleton_class_has_metaclass_p ( VALUE sklass)
static

Definition at line 687 of file class.c.

◆ rb_singleton_class_internal_p()

int rb_singleton_class_internal_p ( VALUE sklass)

Definition at line 693 of file class.c.

◆ rb_special_singleton_class()

VALUE rb_special_singleton_class ( VALUE obj)

Definition at line 2150 of file class.c.

◆ RCLASS_M_TBL_INIT()

static void RCLASS_M_TBL_INIT ( VALUE c)
static

Definition at line 232 of file class.c.

◆ RMODULE_UNINITIALIZED()

static bool RMODULE_UNINITIALIZED ( VALUE module)
inlinestatic

Definition at line 476 of file class.c.

◆ singleton_class_of()

static VALUE singleton_class_of ( VALUE obj)
static

Definition at line 2165 of file class.c.

◆ special_singleton_class_of()

static VALUE special_singleton_class_of ( VALUE obj)
inlinestatic

Definition at line 2139 of file class.c.

Variable Documentation

◆ ruby_vm_global_cvar_state

rb_serial_t ruby_vm_global_cvar_state
extern

Definition at line 501 of file vm.c.