Skip to content

Commit d89e734

Browse files
committed
object.c: refactor rb_obj_class and rb_class_real
1 parent f5da639 commit d89e734

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

object.c

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -289,11 +289,21 @@ fake_class_p(VALUE klass)
289289
return FL_TEST_RAW(klass, T_ICLASS | FL_SINGLETON);
290290
}
291291

292+
static inline VALUE
293+
class_real(VALUE cl)
294+
{
295+
RUBY_ASSERT(cl);
296+
while (RB_UNLIKELY(fake_class_p(cl))) {
297+
cl = RCLASS_SUPER(cl);
298+
}
299+
return cl;
300+
}
301+
292302
VALUE
293303
rb_class_real(VALUE cl)
294304
{
295-
while (RB_UNLIKELY(cl && fake_class_p(cl))) {
296-
cl = RCLASS_SUPER(cl);
305+
if (cl) {
306+
cl = class_real(cl);
297307
}
298308
return cl;
299309
}
@@ -302,21 +312,16 @@ VALUE
302312
rb_obj_class(VALUE obj)
303313
{
304314
VALUE cl = CLASS_OF(obj);
305-
while (RB_UNLIKELY(cl && fake_class_p(cl))) {
306-
cl = RCLASS_SUPER(cl);
315+
if (cl) {
316+
cl = class_real(cl);
307317
}
308318
return cl;
309319
}
310320

311321
VALUE
312322
rb_obj_class_must(VALUE obj)
313323
{
314-
VALUE cl = CLASS_OF(obj);
315-
RUBY_ASSERT(cl);
316-
while (RB_UNLIKELY(fake_class_p(cl))) {
317-
cl = RCLASS_SUPER(cl);
318-
}
319-
return cl;
324+
return class_real(CLASS_OF(obj));
320325
}
321326

322327
/*

0 commit comments

Comments
 (0)