Skip to content

Commit d265f17

Browse files
committed
Add specs for rb_class_get_superclass
1 parent 6daa6b6 commit d265f17

File tree

3 files changed

+18
-0
lines changed

3 files changed

+18
-0
lines changed

lib/truffle/truffle/cext.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,7 @@ def rb_class_real(ruby_class)
604604
end
605605

606606
def rb_class_get_superclass(ruby_class)
607+
return false unless Primitive.is_a?(ruby_class, Class)
607608
ruby_class.superclass || false
608609
end
609610

spec/ruby/optional/capi/class_spec.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -487,4 +487,16 @@ def obj.some_method() end
487487
@s.rb_class_real(0).should == 0
488488
end
489489
end
490+
491+
describe "rb_class_get_superclass" do
492+
it "returns parent class for a provided class" do
493+
a = Class.new
494+
@s.rb_class_get_superclass(Class.new(a)).should == a
495+
end
496+
497+
it "returns false when there is no parent class" do
498+
@s.rb_class_get_superclass(BasicObject).should == false
499+
@s.rb_class_get_superclass(Module.new).should == false
500+
end
501+
end
490502
end

spec/ruby/optional/capi/ext/class_spec.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@ static VALUE class_spec_rb_class_real(VALUE self, VALUE object) {
7979
}
8080
}
8181

82+
static VALUE class_spec_rb_class_get_superclass(VALUE self, VALUE klass) {
83+
return rb_class_get_superclass(klass);
84+
}
85+
8286
static VALUE class_spec_rb_class_superclass(VALUE self, VALUE klass) {
8387
return rb_class_superclass(klass);
8488
}
@@ -160,6 +164,7 @@ void Init_class_spec(void) {
160164
rb_define_method(cls, "rb_class_new_instance_kw", class_spec_rb_class_new_instance_kw, 2);
161165
#endif
162166
rb_define_method(cls, "rb_class_real", class_spec_rb_class_real, 1);
167+
rb_define_method(cls, "rb_class_get_superclass", class_spec_rb_class_get_superclass, 1);
163168
rb_define_method(cls, "rb_class_superclass", class_spec_rb_class_superclass, 1);
164169
rb_define_method(cls, "rb_cvar_defined", class_spec_cvar_defined, 2);
165170
rb_define_method(cls, "rb_cvar_get", class_spec_cvar_get, 2);

0 commit comments

Comments
 (0)