Project

General

Profile

Bug #10901 ยป singleton-class-singleton-methods.patch

jeremyevans0 (Jeremy Evans), 07/08/2019 01:00 AM

View differences:

class.c
int recur = TRUE;
if (rb_check_arity(argc, 0, 1)) recur = RTEST(argv[0]);
if (RB_TYPE_P(obj, T_CLASS) && FL_TEST(obj, FL_SINGLETON)) {
rb_singleton_class(obj);
}
klass = CLASS_OF(obj);
origin = RCLASS_ORIGIN(klass);
me_arg.list = st_init_numtable();
test/ruby/test_object.rb
assert_match(/@\u{3046}=6\b/, x.inspect)
end
def test_singleton_methods
assert_equal([], Object.new.singleton_methods)
assert_equal([], Object.new.singleton_methods(false))
c = Class.new
def c.foo; end
assert_equal([:foo], c.singleton_methods - [:yaml_tag])
assert_equal([:foo], c.singleton_methods(false))
assert_equal([], c.singleton_class.singleton_methods(false))
c.singleton_class.singleton_class
assert_equal([], c.singleton_class.singleton_methods(false))
o = c.new.singleton_class
assert_equal([:foo], o.singleton_methods - [:yaml_tag])
assert_equal([], o.singleton_methods(false))
o.singleton_class
assert_equal([:foo], o.singleton_methods - [:yaml_tag])
assert_equal([], o.singleton_methods(false))
c.extend(Module.new{def bar; end})
assert_equal([:bar, :foo], c.singleton_methods.sort - [:yaml_tag])
assert_equal([:foo], c.singleton_methods(false))
end
def test_singleton_class
x = Object.new
xs = class << x; self; end
    (1-1/1)