summaryrefslogtreecommitdiff
path: root/namespace.c
diff options
context:
space:
mode:
authorSatoshi Tagomori <s-tagomori@sakura.ad.jp>2025-10-07 12:42:03 +0900
committerSatoshi Tagomori <tagomoris@gmail.com>2025-10-07 14:19:26 +0900
commit2548c476a379cebe85166f20e264ae68c2a68dc4 (patch)
tree29d272818bc4f4c6b7602f3c4a91693b6ecf9b2f /namespace.c
parent52c6b32f806b1b812069235fde48e68167eaa0d1 (diff)
Add namespace debug methods and assertions
Diffstat (limited to 'namespace.c')
-rw-r--r--namespace.c33
1 files changed, 31 insertions, 2 deletions
diff --git a/namespace.c b/namespace.c
index 577a1759d2..32249d00bc 100644
--- a/namespace.c
+++ b/namespace.c
@@ -845,11 +845,15 @@ rb_namespace_s_main(VALUE recv)
static const char *
classname(VALUE klass)
{
- VALUE p = RCLASS_CLASSPATH(klass);
+ VALUE p;
+ if (!klass) {
+ return "Qfalse";
+ }
+ p = RCLASSEXT_CLASSPATH(RCLASS_EXT_PRIME(klass));
if (RTEST(p))
return RSTRING_PTR(p);
if (RB_TYPE_P(klass, T_CLASS) || RB_TYPE_P(klass, T_MODULE) || RB_TYPE_P(klass, T_ICLASS))
- return RSTRING_PTR(rb_inspect(klass));
+ return "AnyClassValue";
return "NonClassValue";
}
@@ -973,6 +977,27 @@ rb_f_dump_classext(VALUE recv, VALUE klass)
return res;
}
+static VALUE
+rb_namespace_root_p(VALUE namespace)
+{
+ const rb_namespace_t *ns = (const rb_namespace_t *)rb_get_namespace_t(namespace);
+ return RBOOL(NAMESPACE_ROOT_P(ns));
+}
+
+static VALUE
+rb_namespace_main_p(VALUE namespace)
+{
+ const rb_namespace_t *ns = (const rb_namespace_t *)rb_get_namespace_t(namespace);
+ return RBOOL(NAMESPACE_MAIN_P(ns));
+}
+
+static VALUE
+rb_namespace_user_p(VALUE namespace)
+{
+ const rb_namespace_t *ns = (const rb_namespace_t *)rb_get_namespace_t(namespace);
+ return RBOOL(NAMESPACE_USER_P(ns));
+}
+
#endif /* RUBY_DEBUG */
/*
@@ -1010,6 +1035,10 @@ Init_Namespace(void)
rb_define_singleton_method(rb_cNamespace, "root", rb_namespace_s_root, 0);
rb_define_singleton_method(rb_cNamespace, "main", rb_namespace_s_main, 0);
rb_define_global_function("dump_classext", rb_f_dump_classext, 1);
+
+ rb_define_method(rb_cNamespace, "root?", rb_namespace_root_p, 0);
+ rb_define_method(rb_cNamespace, "main?", rb_namespace_main_p, 0);
+ rb_define_method(rb_cNamespace, "user?", rb_namespace_user_p, 0);
#endif
}