Ruby 3.5.0dev (2025-10-06 revision 704677257ecb01c7ee10aa0dfc55ca1d4fc4636d)
namespace.h
1#ifndef INTERNAL_NAMESPACE_H /*-*-C-*-vi:se ft=c:*/
2#define INTERNAL_NAMESPACE_H
3
4#include "ruby/ruby.h" /* for VALUE */
5
15 /*
16 * To retrieve Namespace object that provides #require and so on.
17 * That is used from load.c, etc., that uses rb_namespace_t internally.
18 */
19 VALUE ns_object;
20 long ns_id; // namespace id to generate ext filenames
21
22 VALUE top_self;
23
24 VALUE load_path;
25 VALUE load_path_snapshot;
26 VALUE load_path_check_cache;
27 VALUE expanded_load_path;
28 VALUE loaded_features;
29 VALUE loaded_features_snapshot;
30 VALUE loaded_features_realpaths;
31 VALUE loaded_features_realpath_map;
32 struct st_table *loaded_features_index;
33 struct st_table *loading_table;
34 VALUE ruby_dln_libmap;
35
36 VALUE gvar_tbl;
37
38 bool is_user;
39 bool is_optional;
40};
42
43#define NAMESPACE_OBJ_P(obj) (rb_obj_class(obj) == rb_cNamespace)
44
45#define NAMESPACE_ROOT_P(ns) (ns && !ns->is_user)
46#define NAMESPACE_USER_P(ns) (ns && ns->is_user)
47#define NAMESPACE_OPTIONAL_P(ns) (ns && ns->is_optional)
48#define NAMESPACE_MAIN_P(ns) (ns && ns->is_user && !ns->is_optional)
49
50#define NAMESPACE_METHOD_DEFINITION(mdef) (mdef ? mdef->ns : NULL)
51#define NAMESPACE_METHOD_ENTRY(me) (me ? NAMESPACE_METHOD_DEFINITION(me->def) : NULL)
52#define NAMESPACE_CC(cc) (cc ? NAMESPACE_METHOD_ENTRY(cc->cme_) : NULL)
53#define NAMESPACE_CC_ENTRIES(ccs) (ccs ? NAMESPACE_METHOD_ENTRY(ccs->cme) : NULL)
54
55RUBY_EXTERN bool ruby_namespace_enabled;
56RUBY_EXTERN bool ruby_namespace_init_done;
57
58static inline bool
59rb_namespace_available(void)
60{
61 return ruby_namespace_enabled;
62}
63
64const rb_namespace_t * rb_root_namespace(void);
65const rb_namespace_t * rb_main_namespace(void);
66const rb_namespace_t * rb_current_namespace(void);
67const rb_namespace_t * rb_loading_namespace(void);
68
69void rb_namespace_entry_mark(void *);
70void rb_namespace_gc_update_references(void *ptr);
71
72rb_namespace_t * rb_get_namespace_t(VALUE ns);
73VALUE rb_get_namespace_object(rb_namespace_t *ns);
74
75VALUE rb_namespace_local_extension(VALUE namespace, VALUE fname, VALUE path);
76
77void rb_initialize_main_namespace(void);
78void rb_namespace_init_done(void);
79#endif /* INTERNAL_NAMESPACE_H */
#define RUBY_EXTERN
Declaration of externally visible global variables.
Definition dllexport.h:45
Internal header for Namespace.
Definition namespace.h:14
Definition st.h:79
uintptr_t VALUE
Type that represents a Ruby object.
Definition value.h:40