37 #define id_attached id__attached__
44 if (super && super !=
Qundef) {
45 entry =
xmalloc(
sizeof(*entry));
65 entry =
xmalloc(
sizeof(*entry));
66 entry->
klass = iclass;
103 entry = *
RCLASS_EXT(klass)->module_subclasses;
240 if (node->nd_clss == old_klass) {
242 RB_OBJ_WRITE(new_node, &new_node->nd_next, node->nd_next);
243 *new_cref_ptr = new_node;
247 node = node->nd_next;
248 *new_cref_ptr = new_node;
249 new_cref_ptr = &new_node->nd_next;
251 *new_cref_ptr =
NULL;
435 #define METACLASS_OF(k) RBASIC(k)->klass
436 #define SET_METACLASS_OF(k, cls) RBASIC_SET_CLASS(k, cls)
443 #define META_CLASS_OF_CLASS_CLASS_P(k) (METACLASS_OF(k) == (k))
450 #define HAVE_METACLASS_P(k) \
451 (FL_TEST(METACLASS_OF(k), FL_SINGLETON) && \
452 rb_ivar_get(METACLASS_OF(k), id_attached) == (k))
461 #define ENSURE_EIGENCLASS(klass) \
462 (HAVE_METACLASS_P(klass) ? METACLASS_OF(klass) : make_metaclass(klass))
609 return rb_funcall(super, inherited, 1, klass);
647 rb_warn(
"no super class for `%s', Object assumed", name);
714 rb_warn(
"no super class for `%s::%s', Object assumed",
797 module =
RBASIC(module)->klass;
855 int method_changed = 0, constant_changed = 0;
859 int superclass_seen =
FALSE;
870 if (!superclass_seen) {
877 superclass_seen =
TRUE;
891 VALUE refined_class =
901 constant_changed = 1;
909 return method_changed;
953 if (origin == klass) {
1071 #define VISI(x) ((x)&NOEX_MASK)
1072 #define VISI_CHECK(x,f) (VISI(x) == (f))
1083 visi = (type == visi);
1146 int recur, prepended = 0;
1412 if (klass != origin && (mtbl =
RCLASS_M_TBL(klass)) != 0)
1519 #define SPECIAL_SINGLETON(x,c) do {\
1560 rb_bug(
"unknown immediate %p", (
void *)obj);
1572 klass =
RBASIC(obj)->klass;
1604 klass =
RBASIC(obj)->klass;
1731 const char *p = fmt;
1734 int f_var = 0, f_hash = 0, f_block = 0;
1735 int n_lead = 0, n_opt = 0, n_trail = 0, n_mand;
1770 rb_fatal(
"bad scan arg format: %s", fmt);
1772 n_mand = n_lead + n_trail;
1777 va_start(vargs, fmt);
1780 if (f_hash && n_mand < argc) {
1787 if (!f_var && n_mand + n_opt < argc)
1795 hash = opts ? opts :
Qnil;
1800 for (i = n_lead; i-- > 0; ) {
1801 var = va_arg(vargs,
VALUE *);
1802 if (var) *var = argv[argi];
1806 for (i = n_opt; i-- > 0; ) {
1807 var = va_arg(vargs,
VALUE *);
1808 if (argi < argc - n_trail) {
1809 if (var) *var = argv[argi];
1813 if (var) *var =
Qnil;
1818 int n_var = argc - argi - n_trail;
1820 var = va_arg(vargs,
VALUE *);
1830 for (i = n_trail; i-- > 0; ) {
1831 var = va_arg(vargs,
VALUE *);
1832 if (var) *var = argv[argi];
1837 var = va_arg(vargs,
VALUE *);
1838 if (var) *var =
hash;
1842 var = va_arg(vargs,
VALUE *);
1864 const char *
msg =
"";
1881 for (i = 0; i < keywords; i++) {
1903 VALUE parthash[2] = {0, 0};
1911 *orighash = parthash[1];
1923 #define extract_kwarg(keyword, val) \
1924 (key = (st_data_t)(keyword), values ? \
1925 st_delete(rb_hash_tbl_raw(keyword_hash), &key, (val)) : \
1926 st_lookup(rb_hash_tbl_raw(keyword_hash), key, (val)))
1930 optional = -1-optional;
1933 for (j = 0; j < required + optional; j++) {
1938 for (; i < required; i++) {
1943 if (values) values[i] = (
VALUE)val;
1950 if (!
NIL_P(missing)) {
1955 if (optional && keyword_hash) {
1956 for (i = 0; i < optional; i++) {
1959 if (values) values[required+i] = (
VALUE)val;
1964 if (!rest && keyword_hash) {
1965 if (
RHASH_SIZE(keyword_hash) > (
unsigned int)j) {
1970 #undef extract_kwarg