Feature #12364 ยป 0001-Copy-the-serial-number-from-the-super-class-to-the-s.patch
| benchmark/bm_vm2_poly_singleton.rb | ||
|---|---|---|
|
class C1
|
||
|
def m; 1; end
|
||
|
end
|
||
|
o1 = C1.new
|
||
|
o2 = C1.new
|
||
|
o2.singleton_class
|
||
|
i = 0
|
||
|
while i<6_000_000 # benchmark loop 2
|
||
|
o = (i % 2 == 0) ? o1 : o2
|
||
|
o.m; o.m; o.m; o.m; o.m; o.m; o.m; o.m
|
||
|
i += 1
|
||
|
end
|
||
| class.c | ||
|---|---|---|
|
klass = RBASIC(obj)->klass;
|
||
|
if (!(FL_TEST(klass, FL_SINGLETON) &&
|
||
|
rb_ivar_get(klass, id_attached) == obj)) {
|
||
|
rb_serial_t serial = RCLASS_SERIAL(klass);
|
||
|
klass = rb_make_metaclass(obj, klass);
|
||
|
RCLASS_SERIAL(klass) = serial;
|
||
|
}
|
||
|
if (OBJ_TAINTED(obj)) {
|
||