ruby/inits.c
Satoshi Tagomori 4f47327287 Update current namespace management by using control frames and lexical contexts
to fix inconsistent and wrong current namespace detections.

This includes:
* Moving load_path and related things from rb_vm_t to rb_namespace_t to simplify
  accessing those values via namespace (instead of accessing either vm or ns)
* Initializing root_namespace earlier and consolidate builtin_namespace into root_namespace
* Adding VM_FRAME_FLAG_NS_REQUIRE for checkpoints to detect a namespace to load/require files
* Removing implicit refinements in the root namespace which was used to determine
  the namespace to be loaded (replaced by VM_FRAME_FLAG_NS_REQUIRE)
* Removing namespaces from rb_proc_t because its namespace can be identified by lexical context
* Starting to use ep[VM_ENV_DATA_INDEX_SPECVAL] to store the current namespace when
  the frame type is MAGIC_TOP or MAGIC_CLASS (block handlers don't exist in this case)
2025-09-29 01:15:38 +09:00

116 lines
2.2 KiB
C

/**********************************************************************
inits.c -
$Author$
created at: Tue Dec 28 16:01:58 JST 1993
Copyright (C) 1993-2007 Yukihiro Matsumoto
**********************************************************************/
#include "internal/inits.h"
#include "ruby.h"
#include "builtin.h"
static void Init_builtin_prelude(void);
#include "prelude.rbinc"
#define CALL(n) {void Init_##n(void); Init_##n();}
void
rb_call_inits(void)
{
CALL(default_shapes);
CALL(Thread_Mutex);
CALL(RandomSeedCore);
CALL(encodings);
CALL(sym);
CALL(var_tables);
CALL(Object);
CALL(top_self);
CALL(Encoding);
CALL(Comparable);
CALL(Enumerable);
CALL(String);
CALL(Exception);
CALL(eval);
CALL(jump);
CALL(Numeric);
CALL(Bignum);
CALL(syserr);
CALL(Array);
CALL(Hash);
CALL(Struct);
CALL(Regexp);
CALL(pack);
CALL(transcode);
CALL(marshal);
CALL(Range);
CALL(IO);
CALL(IO_Buffer)
CALL(Dir);
CALL(Time);
CALL(Random);
CALL(load);
CALL(Namespace);
CALL(Proc);
CALL(Binding);
CALL(Math);
CALL(GC);
CALL(WeakMap);
CALL(Enumerator);
CALL(Ractor);
CALL(VM);
CALL(ISeq);
CALL(Thread);
CALL(signal);
CALL(Cont);
CALL(Fiber_Scheduler);
CALL(process);
CALL(Rational);
CALL(Complex);
CALL(MemoryView);
CALL(pathname);
CALL(version);
CALL(vm_trace);
CALL(vm_stack_canary);
CALL(ast);
CALL(shape);
CALL(Prism);
CALL(unicode_version);
CALL(Set);
// enable builtin loading
CALL(builtin);
}
void
rb_call_builtin_inits(void)
{
#define BUILTIN(n) CALL(builtin_##n)
BUILTIN(jit_hook);
BUILTIN(yjit);
BUILTIN(zjit);
BUILTIN(kernel);
BUILTIN(gc);
BUILTIN(ractor);
BUILTIN(numeric);
BUILTIN(io);
BUILTIN(dir);
BUILTIN(ast);
BUILTIN(trace_point);
BUILTIN(pack);
BUILTIN(pathname_builtin);
BUILTIN(warning);
BUILTIN(array);
BUILTIN(hash);
BUILTIN(symbol);
BUILTIN(timev);
BUILTIN(thread_sync);
BUILTIN(nilclass);
BUILTIN(marshal);
BUILTIN(jit_undef);
Init_builtin_prelude();
}
#undef CALL