@@ -1712,6 +1712,30 @@ mrb_mod_protected(mrb_state *mrb, mrb_value mod)
17121712return mod;
17131713}
171417141715+static mrb_value
1716+top_public(mrb_state *mrb, mrb_value self)
1717+{
1718+self = mrb_obj_value(mrb->object_class);
1719+mrb_mod_visibility(mrb, self, MT_PUBLIC);
1720+return self;
1721+}
1722+1723+static mrb_value
1724+top_private(mrb_state *mrb, mrb_value self)
1725+{
1726+self = mrb_obj_value(mrb->object_class);
1727+mrb_mod_visibility(mrb, self, MT_PRIVATE);
1728+return self;
1729+}
1730+1731+static mrb_value
1732+top_protected(mrb_state *mrb, mrb_value self)
1733+{
1734+self = mrb_obj_value(mrb->object_class);
1735+mrb_mod_visibility(mrb, self, MT_PROTECTED);
1736+return self;
1737+}
1738+17151739MRB_API struct RClass*
17161740mrb_singleton_class_ptr(mrb_state *mrb, mrb_value v)
17171741{
@@ -3140,4 +3164,7 @@ mrb_init_class(mrb_state *mrb)
31403164mrb_define_singleton_method_id(mrb, mrb->top_self, MRB_SYM(inspect), inspect_main, MRB_ARGS_NONE());
31413165mrb_define_singleton_method_id(mrb, mrb->top_self, MRB_SYM(to_s), inspect_main, MRB_ARGS_NONE());
31423166mrb_define_singleton_method_id(mrb, mrb->top_self, MRB_SYM(define_method), top_define_method, MRB_ARGS_ARG(1,1));
3167+mrb_define_singleton_method_id(mrb, mrb->top_self, MRB_SYM(public), top_public, MRB_ARGS_ANY());
3168+mrb_define_singleton_method_id(mrb, mrb->top_self, MRB_SYM(private), top_private, MRB_ARGS_ANY());
3169+mrb_define_singleton_method_id(mrb, mrb->top_self, MRB_SYM(protected), top_protected, MRB_ARGS_ANY());
31433170}