mirror of
https://github.com/ruby/ruby.git
synced 2025-08-23 13:04:13 +02:00

This commit adds a `capacity` field to shapes, and adds shape transitions whenever an object's capacity changes. Objects which are allocated out of a bigger size pool will also make a transition from the root shape to the shape with the correct capacity for their size pool when they are allocated. This commit will allow us to remove numiv from objects completely, and will also mean we can guarantee that if two objects share shapes, their IVs are in the same positions (an embedded and extended object cannot share shapes). This will enable us to implement ivar sets in YJIT using object shapes. Co-Authored-By: Aaron Patterson <tenderlove@ruby-lang.org>
114 lines
2.1 KiB
C
114 lines
2.1 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);
|
|
#if USE_TRANSIENT_HEAP
|
|
CALL(TransientHeap);
|
|
#endif
|
|
CALL(vm_postponed_job);
|
|
CALL(Method);
|
|
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(signal);
|
|
CALL(load);
|
|
CALL(Proc);
|
|
CALL(Binding);
|
|
CALL(Math);
|
|
CALL(GC);
|
|
CALL(Enumerator);
|
|
CALL(Ractor);
|
|
CALL(VM);
|
|
CALL(ISeq);
|
|
CALL(Thread);
|
|
CALL(Fiber_Scheduler);
|
|
CALL(process);
|
|
CALL(Cont);
|
|
CALL(Rational);
|
|
CALL(Complex);
|
|
CALL(MemoryView);
|
|
CALL(version);
|
|
CALL(vm_trace);
|
|
CALL(vm_stack_canary);
|
|
CALL(ast);
|
|
CALL(gc_stress);
|
|
CALL(shape);
|
|
|
|
// enable builtin loading
|
|
CALL(builtin);
|
|
}
|
|
|
|
void
|
|
rb_call_builtin_inits(void)
|
|
{
|
|
#define BUILTIN(n) CALL(builtin_##n)
|
|
BUILTIN(gc);
|
|
BUILTIN(ractor);
|
|
BUILTIN(numeric);
|
|
BUILTIN(io);
|
|
BUILTIN(dir);
|
|
BUILTIN(ast);
|
|
BUILTIN(trace_point);
|
|
BUILTIN(pack);
|
|
BUILTIN(warning);
|
|
BUILTIN(array);
|
|
BUILTIN(kernel);
|
|
BUILTIN(timev);
|
|
BUILTIN(thread_sync);
|
|
BUILTIN(yjit);
|
|
BUILTIN(nilclass);
|
|
BUILTIN(marshal);
|
|
#if USE_MJIT
|
|
BUILTIN(mjit);
|
|
BUILTIN(mjit_c);
|
|
BUILTIN(mjit_compiler);
|
|
#endif
|
|
Init_builtin_prelude();
|
|
}
|
|
#undef CALL
|