[前][次][番号順一覧][スレッド一覧]

ruby-changes:71453

From: John <ko1@a...>
Date: Fri, 18 Mar 2022 03:48:54 +0900 (JST)
Subject: [ruby-changes:71453] 29b68b89a0 (master): Faster rb_class_superclass

https://git.ruby-lang.org/ruby.git/commit/?id=29b68b89a0

From 29b68b89a0c0ea7de46c058fab746550398151f0 Mon Sep 17 00:00:00 2001
From: John Hawthorn <john@h...>
Date: Fri, 4 Mar 2022 23:31:37 -0800
Subject: Faster rb_class_superclass

This uses the RCLASS_SUPERCLASSES array to quickly find the next
SUPERCLASS of klass which is a T_CLASS.
---
 object.c | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/object.c b/object.c
index f6736fbe8b..26eb823621 100644
--- a/object.c
+++ b/object.c
@@ -2034,19 +2034,18 @@ rb_class_new_instance(int argc, const VALUE *argv, VALUE klass) https://github.com/ruby/ruby/blob/trunk/object.c#L2034
 VALUE
 rb_class_superclass(VALUE klass)
 {
+    RUBY_ASSERT(RB_TYPE_P(klass, T_CLASS));
+
     VALUE super = RCLASS_SUPER(klass);
 
     if (!super) {
 	if (klass == rb_cBasicObject) return Qnil;
 	rb_raise(rb_eTypeError, "uninitialized class");
+    } else {
+        super = RCLASS_SUPERCLASSES(klass)[RCLASS_SUPERCLASS_DEPTH(klass) - 1];
+        RUBY_ASSERT(RB_TYPE_P(klass, T_CLASS));
+        return super;
     }
-    while (RB_TYPE_P(super, T_ICLASS)) {
-	super = RCLASS_SUPER(super);
-    }
-    if (!super) {
-	return Qnil;
-    }
-    return super;
 }
 
 VALUE
-- 
cgit v1.2.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]