183 if (clone == orig)
return clone;
279 #define METACLASS_OF(k) RBASIC(k)->klass
286 #define META_CLASS_OF_CLASS_CLASS_P(k) (METACLASS_OF(k) == (k))
296 #define ENSURE_EIGENCLASS(klass) \
297 (rb_ivar_get(METACLASS_OF(klass), id_attached) == (klass) ? METACLASS_OF(klass) : make_metaclass(klass))
448 return rb_funcall(super, inherited, 1, klass);
486 rb_warn(
"no super class for `%s', Object assumed", name);
553 rb_warn(
"no super class for `%s::%s', Object assumed",
638 module =
RBASIC(module)->klass;
654 RBASIC(klass)->klass = module;
680 int superclass_seen =
FALSE;
689 if (!superclass_seen) {
696 superclass_seen =
TRUE;
809 #define VISI(x) ((x)&NOEX_MASK)
810 #define VISI_CHECK(x,f) (VISI(x) == (f))
821 visi = (type == visi);
1241 #define SPECIAL_SINGLETON(x,c) do {\
1269 rb_bug(
"unknown immediate %p", (
void *)obj);
1274 klass =
RBASIC(obj)->klass;
1419 const char *
p =
fmt;
1422 int f_var = 0, f_hash = 0, f_block = 0;
1423 int n_lead = 0, n_opt = 0, n_trail = 0, n_mand;
1458 rb_fatal(
"bad scan arg format: %s", fmt);
1460 n_mand = n_lead + n_trail;
1465 va_start(vargs, fmt);
1468 if (f_hash && n_mand < argc) {
1475 if (!f_var && n_mand + n_opt < argc)
1485 for (i = n_lead; i-- > 0; ) {
1486 var = va_arg(vargs,
VALUE *);
1487 if (var) *var = argv[argi];
1491 for (i = n_opt; i-- > 0; ) {
1492 var = va_arg(vargs,
VALUE *);
1493 if (argi < argc - n_trail) {
1494 if (var) *var = argv[argi];
1498 if (var) *var =
Qnil;
1503 int n_var = argc - argi - n_trail;
1505 var = va_arg(vargs,
VALUE *);
1515 for (i = n_trail; i-- > 0; ) {
1516 var = va_arg(vargs,
VALUE *);
1517 if (var) *var = argv[argi];
1522 var = va_arg(vargs,
VALUE *);
1523 if (var) *var =
hash;
1527 var = va_arg(vargs,
VALUE *);
1545 argc, n_mand, n_mand + n_opt, f_var ?
"+" :
"");
1548 argc, n_mand, f_var ?
"+" :
"");
static VALUE make_metaclass(VALUE klass)
Creates a metaclass of klass.
#define UNDEFINED_METHOD_ENTRY_P(me)
VALUE rb_define_module_id_under(VALUE outer, ID id)
VALUE rb_ary_new4(long n, const VALUE *elts)
RUBY_EXTERN VALUE rb_cFalseClass
VALUE rb_mod_include_p(VALUE mod, VALUE mod2)
void rb_bug(const char *fmt,...)
void rb_check_inheritable(VALUE super)
Ensures a class can be derived from super.
static int ins_methods_push(ID name, long type, VALUE ary, long visi)
VALUE rb_obj_private_methods(int argc, VALUE *argv, VALUE obj)
void rb_define_singleton_method(VALUE obj, const char *name, VALUE(*func)(ANYARGS), int argc)
Defines a singleton method for obj.
VALUE rb_class_private_instance_methods(int argc, VALUE *argv, VALUE mod)
union rb_method_definition_struct::@42 body
VALUE rb_define_class_id_under(VALUE outer, ID id, VALUE super)
Defines a class under the namespace of outer.
SSL_METHOD *(* func)(void)
static VALUE class_alloc(VALUE flags, VALUE klass)
Allocates a struct RClass for a new class.
VALUE rb_mod_ancestors(VALUE mod)
void rb_define_private_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
VALUE rb_ary_push(VALUE ary, VALUE item)
VALUE rb_singleton_class_clone(VALUE obj)
VALUE rb_mod_init_copy(VALUE clone, VALUE orig)
void Init_class_hierarchy(void)
VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super)
Defines a class under the namespace of outer.
static int ins_methods_priv_i(st_data_t name, st_data_t type, st_data_t ary)
void rb_raise(VALUE exc, const char *fmt,...)
VALUE rb_ivar_get(VALUE, ID)
static int clone_const_i(st_data_t key, st_data_t value, st_data_t data)
int rb_const_defined(VALUE, ID)
void rb_include_module(VALUE klass, VALUE module)
void rb_define_protected_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
void rb_define_global_function(const char *name, VALUE(*func)(ANYARGS), int argc)
Defines a global function.
rb_alias(klass, key_id, value_id)
void rb_undef_method(VALUE klass, const char *name)
const char * rb_obj_classname(VALUE)
void rb_name_error(ID id, const char *fmt,...)
VALUE rb_singleton_class(VALUE obj)
Returns the singleton class of obj.
static int clone_method(ID mid, const rb_method_entry_t *me, struct clone_method_data *data)
#define RB_TYPE_P(obj, type)
static VALUE include_class_new(VALUE module, VALUE super)
VALUE rb_class_inherited(VALUE super, VALUE klass)
Calls Class::inherited.
int rb_block_given_p(void)
RUBY_EXTERN VALUE rb_cObject
void rb_attr(VALUE, ID, int, int, int)
static VALUE boot_defclass(const char *name, VALUE super)
VALUE rb_class_real(VALUE)
RUBY_EXTERN VALUE rb_cBasicObject
#define RMODULE_CONST_TBL(m)
RUBY_EXTERN VALUE rb_mKernel
VALUE rb_define_class(const char *name, VALUE super)
Defines a top-level class.
RUBY_EXTERN VALUE rb_cTrueClass
VALUE rb_define_module_id(ID id)
#define NEWOBJ(obj, type)
#define META_CLASS_OF_CLASS_CLASS_P(k)
whether k is a meta^(n)-class of Class class
RUBY_EXTERN VALUE rb_cModule
void rb_gc_register_mark_object(VALUE obj)
VALUE rb_obj_protected_methods(int argc, VALUE *argv, VALUE obj)
VALUE rb_obj_init_copy(VALUE, VALUE)
int rb_obj_basic_to_s_p(VALUE obj)
VALUE rb_const_get(VALUE, ID)
void rb_define_alias(VALUE klass, const char *name1, const char *name2)
Defines an alias of a method.
void rb_define_module_function(VALUE module, const char *name, VALUE(*func)(ANYARGS), int argc)
Defines a module function for module.
static VALUE class_instance_method_list(int argc, VALUE *argv, VALUE mod, int obj, int(*func)(st_data_t, st_data_t, st_data_t))
void rb_fatal(const char *fmt,...)
#define RB_GC_GUARD(object)
rb_method_entry_t * rb_add_method(VALUE klass, ID mid, rb_method_type_t type, void *option, rb_method_flag_t noex)
int rb_scan_args(int argc, const VALUE *argv, const char *fmt,...)
static int ins_methods_i(st_data_t name, st_data_t type, st_data_t ary)
void rb_clear_cache(void)
VALUE rb_obj_public_methods(int argc, VALUE *argv, VALUE obj)
static int ins_methods_pub_i(st_data_t name, st_data_t type, st_data_t ary)
void rb_name_class(VALUE, ID)
const char * rb_class2name(VALUE)
VALUE rb_make_metaclass(VALUE obj, VALUE unused)
RUBY_EXTERN VALUE rb_cClass
VALUE rb_class_instance_methods(int argc, VALUE *argv, VALUE mod)
rb_method_entry_t * rb_method_entry(VALUE klass, ID id)
void rb_free_const_table(st_table *tbl)
#define RCLASS_CONST_TBL(c)
VALUE rb_define_module_under(VALUE outer, const char *name)
VALUE rb_class_protected_instance_methods(int argc, VALUE *argv, VALUE mod)
int rb_const_defined_at(VALUE, ID)
void rb_define_method_id(VALUE klass, ID mid, VALUE(*func)(ANYARGS), int argc)
VALUE rb_class_public_instance_methods(int argc, VALUE *argv, VALUE mod)
void rb_singleton_class_attached(VALUE klass, VALUE obj)
Attach a object to a singleton class.
VALUE rb_module_new(void)
VALUE rb_check_convert_type(VALUE, int, const char *, const char *)
#define ENSURE_EIGENCLASS(klass)
ensures klass belongs to its own eigenclass.
VALUE rb_block_proc(void)
VALUE rb_obj_singleton_methods(int argc, VALUE *argv, VALUE obj)
rb_method_definition_t * def
void rb_define_attr(VALUE klass, const char *name, int read, int write)
Defines (a) public accessor method(s) for an attribute.
static VALUE make_singleton_class(VALUE obj)
Creates a singleton class for obj.
static int rb_special_const_p(VALUE obj)
static int method_entry_i(st_data_t key, st_data_t value, st_data_t data)
struct rb_encoding_entry * list
VALUE rb_obj_methods(int argc, VALUE *argv, VALUE obj)
static int ins_methods_prot_i(st_data_t name, st_data_t type, st_data_t ary)
VALUE rb_const_get_at(VALUE, ID)
rb_const_set(self, ID_SUBST_INFO, cbsubst_obj)
void rb_frozen_class_p(VALUE klass)
#define RCLASS_IV_INDEX_TBL(c)
static void class_init_copy_check(VALUE clone, VALUE orig)
#define GetISeqPtr(obj, ptr)
const char * rb_id2name(ID id)
return rb_funcall(q->proc, ID_call, 0)
VALUE rb_mod_included_modules(VALUE mod)
VALUE rb_define_class_id(ID id, VALUE super)
Defines a new class.
#define SPECIAL_SINGLETON(x, c)
rb_method_entry_t * rb_method_entry_set(VALUE klass, ID mid, const rb_method_entry_t *, rb_method_flag_t noex)
#define CONST_ID(var, str)
VALUE rb_define_module(const char *name)
static int clone_const(ID key, const rb_const_entry_t *ce, st_table *tbl)
static VALUE singleton_class_of(VALUE obj)
void rb_add_method_cfunc(VALUE klass, ID mid, VALUE(*func)(ANYARGS), int argc, rb_method_flag_t noex)
#define OBJSETUP(obj, c, t)
VALUE rb_class_new(VALUE super)
Creates a new class.
void rb_define_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
void rb_warn(const char *fmt,...)
VALUE rb_class_boot(VALUE super)
A utility function that wraps class_alloc.
RUBY_EXTERN VALUE rb_cNilClass
void rb_free_m_table(st_table *tbl)
void rb_set_class_path_string(VALUE, VALUE, VALUE)
VALUE rb_iseq_clone(VALUE iseqval, VALUE newcbase)