diff options
| author | Satoshi Tagomori <s-tagomori@sakura.ad.jp> | 2025-10-31 23:38:16 +0900 |
|---|---|---|
| committer | Satoshi Tagomori <tagomoris@gmail.com> | 2025-11-03 02:06:11 +0900 |
| commit | e89eecceafea3f8834c6fc4cdd74a7812591cae5 (patch) | |
| tree | ee8e872cf9ea3bd30c11b57ec0bbb71c52decd7a /class.c | |
| parent | bc77a11bd845e4c3d79b990c196fedca37e9ab0b (diff) | |
No need to call rb_define_class/module_under_id
Classes/modules defined in a namespace are defined under ::Object
as usual (as without namespaces), and it'll be set into the const_tbl
of ::Object.
In namespaces, namespace objects' const_tbl is equal to the one of ::Object.
So constants of ::Object are just equal to constants of the namespace.
That means, top level classes/modules in a namespace can be referred
as namespace::KlassName without calling rb_define_class_under_id().
Diffstat (limited to 'class.c')
| -rw-r--r-- | class.c | 14 |
1 files changed, 2 insertions, 12 deletions
@@ -1605,13 +1605,8 @@ VALUE rb_define_class(const char *name, VALUE super) { VALUE klass; - ID id; - const rb_namespace_t *ns = rb_current_namespace(); + ID id = rb_intern(name); - id = rb_intern(name); - if (NAMESPACE_OPTIONAL_P(ns)) { - return rb_define_class_id_under(ns->ns_object, id, super); - } if (rb_const_defined(rb_cObject, id)) { klass = rb_const_get(rb_cObject, id); if (!RB_TYPE_P(klass, T_CLASS)) { @@ -1723,13 +1718,8 @@ VALUE rb_define_module(const char *name) { VALUE module; - ID id; - const rb_namespace_t *ns = rb_current_namespace(); + ID id = rb_intern(name); - id = rb_intern(name); - if (NAMESPACE_OPTIONAL_P(ns)) { - return rb_define_module_id_under(ns->ns_object, id); - } if (rb_const_defined(rb_cObject, id)) { module = rb_const_get(rb_cObject, id); if (!RB_TYPE_P(module, T_MODULE)) { |
