diff options
| author | John Hawthorn <john@hawthorn.email> | 2025-05-22 16:07:22 -0700 |
|---|---|---|
| committer | John Hawthorn <john@hawthorn.email> | 2025-05-23 10:22:24 -0700 |
| commit | e01e89f55c82be8db5d8ccbf305ee38e3769e582 (patch) | |
| tree | 2697dd082c8d70b19b315a8ab2b6a90a963a8ca2 /object.c | |
| parent | 11ad7f5f47b4e4919bcf7a03338a62ef5b5396cc (diff) | |
Avoid calling RCLASS_SUPER in rb_class_superclass
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/13420
Diffstat (limited to 'object.c')
| -rw-r--r-- | object.c | 17 |
1 files changed, 8 insertions, 9 deletions
@@ -2259,23 +2259,22 @@ rb_class_superclass(VALUE klass) { RUBY_ASSERT(RB_TYPE_P(klass, T_CLASS)); - VALUE super = RCLASS_SUPER(klass); - VALUE *superclasses; - size_t superclasses_depth; + VALUE *superclasses = RCLASS_SUPERCLASSES(klass); + size_t superclasses_depth = RCLASS_SUPERCLASS_DEPTH(klass); - if (!super) { - if (klass == rb_cBasicObject) return Qnil; + if (klass == rb_cBasicObject) return Qnil; + + if (!superclasses) { + RUBY_ASSERT(!RCLASS_SUPER(klass)); rb_raise(rb_eTypeError, "uninitialized class"); } - superclasses_depth = RCLASS_SUPERCLASS_DEPTH(klass); if (!superclasses_depth) { return Qnil; } else { - superclasses = RCLASS_SUPERCLASSES(klass); - super = superclasses[superclasses_depth - 1]; - RUBY_ASSERT(RB_TYPE_P(klass, T_CLASS)); + VALUE super = superclasses[superclasses_depth - 1]; + RUBY_ASSERT(RB_TYPE_P(super, T_CLASS)); return super; } } |
