Class: Object

Inherits:
BasicObject
Defined in:
(unknown)

Instance Method Summary collapse

Instance Method Details

#change_class(klass) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'ext/change_class/change_class.c', line 6

static VALUE
rb_change_class(VALUE self, VALUE klass)
{
  VALUE actual_class = KLASS_OF(self);;
  VALUE cl;

  if (TYPE(klass) != T_CLASS)
    rb_raise(rb_eArgError, "Must provide a class.");

  cl = actual_class;

  if (cl == rb_class_real(cl))
    KLASS_OF(self) = klass;
  else {
    while ((RBASIC(RCLASS_SUPER(cl))->flags & FL_SINGLETON) || BUILTIN_TYPE(RCLASS_SUPER(cl)) == T_ICLASS)
      cl = RCLASS_SUPER(cl);

    RCLASS_SUPER(cl) = klass;
  }

  rb_clear_cache();

  return klass;
}