Ruby 3.0.5p211 (2022-11-24 revision ba5cf0f7c52d4d35cc6a173c89eda98ceffa2dcf)
Data Structures | Macros | Functions | Variables
vm.c File Reference
#include "eval_intern.h"
#include "gc.h"
#include "internal.h"
#include "internal/compile.h"
#include "internal/cont.h"
#include "internal/error.h"
#include "internal/eval.h"
#include "internal/inits.h"
#include "internal/object.h"
#include "internal/parse.h"
#include "internal/proc.h"
#include "internal/re.h"
#include "internal/symbol.h"
#include "internal/vm.h"
#include "internal/sanitizers.h"
#include "iseq.h"
#include "mjit.h"
#include "ruby/st.h"
#include "ruby/vm.h"
#include "vm_core.h"
#include "vm_callinfo.h"
#include "vm_debug.h"
#include "vm_exec.h"
#include "vm_insnhelper.h"
#include "ractor_core.h"
#include "vm_sync.h"
#include "builtin.h"
#include "probes.h"
#include "probes_helper.h"
#include "vm_insnhelper.c"
#include "vm_exec.c"
#include "vm_method.c"
#include "vm_eval.c"
#include "vm_call_iseq_optimized.inc"

Go to the source code of this file.

Data Structures

struct  collect_outer_variable_name_data
 

Macros

#define vm_exec   rb_vm_exec
 
#define PROCDEBUG   0
 
#define ruby_vm_redefined_flag   GET_VM()->redefined_flag
 
#define S(s)   sym_##s = ID2SYM(rb_intern_const(#s))
 
#define SET(name, attr)
 
#define OP(mid_, bop_)   (mid = id##mid_, bop = BOP_##bop_, ruby_vm_redefined_flag[bop] = 0)
 
#define C(k)   add_opt_method(rb_c##k, mid, bop)
 
#define SET(name)   rb_hash_aset(result, ID2SYM(rb_intern(#name)), SIZET2NUM(vm->default_params.name));
 
#define thread_data_type   ruby_threadptr_data_type
 
#define REWIND_CFP(expr)
 

Functions

VALUE rb_str_concat_literals (size_t, const VALUE *)
 
VALUE vm_exec (rb_execution_context_t *, bool)
 
const VALUErb_vm_ep_local_ep (const VALUE *ep)
 
int rb_vm_cframe_keyword_p (const rb_control_frame_t *cfp)
 
VALUE rb_vm_frame_block_handler (const rb_control_frame_t *cfp)
 
rb_cref_trb_vm_cref_new_toplevel (void)
 
void rb_vm_block_ep_update (VALUE obj, const struct rb_block *dst, const VALUE *ep)
 
VALUE rb_vm_invoke_bmethod (rb_execution_context_t *ec, rb_proc_t *proc, VALUE self, int argc, const VALUE *argv, int kw_splat, VALUE block_handler, const rb_callable_method_entry_t *me)
 
rb_serial_t rb_next_class_serial (void)
 
void rb_vm_inc_const_missing_count (void)
 
int rb_dtrace_setup (rb_execution_context_t *ec, VALUE klass, ID id, struct ruby_dtrace_method_hook_args *args)
 
rb_control_frame_trb_vm_get_binding_creatable_next_cfp (const rb_execution_context_t *ec, const rb_control_frame_t *cfp)
 
rb_control_frame_trb_vm_get_ruby_level_next_cfp (const rb_execution_context_t *ec, const rb_control_frame_t *cfp)
 
void rb_vm_pop_cfunc_frame (void)
 
void rb_vm_rewind_cfp (rb_execution_context_t *ec, rb_control_frame_t *cfp)
 
void ruby_vm_at_exit (void(*func)(rb_vm_t *))
 ruby_vm_at_exit registers a function func to be invoked when a VM passed away. More...
 
void rb_vm_stack_to_heap (rb_execution_context_t *ec)
 
const rb_env_trb_vm_env_prev_env (const rb_env_t *env)
 
VALUE rb_vm_env_local_variables (const rb_env_t *env)
 
VALUE rb_iseq_local_variables (const rb_iseq_t *iseq)
 
void rb_vm_block_copy (VALUE obj, const struct rb_block *dst, const struct rb_block *src)
 
VALUE rb_proc_dup (VALUE self)
 
VALUE rb_proc_isolate_bang (VALUE self)
 
VALUE rb_proc_isolate (VALUE self)
 
VALUE rb_proc_ractor_make_shareable (VALUE self)
 
VALUE rb_vm_make_proc_lambda (const rb_execution_context_t *ec, const struct rb_captured_block *captured, VALUE klass, int8_t is_lambda)
 
VALUE rb_vm_make_binding (const rb_execution_context_t *ec, const rb_control_frame_t *src_cfp)
 
const VALUErb_binding_add_dynavars (VALUE bindval, rb_binding_t *bind, int dyncount, const ID *dynvars)
 
VALUE rb_vm_invoke_proc (rb_execution_context_t *ec, rb_proc_t *proc, int argc, const VALUE *argv, int kw_splat, VALUE passed_block_handler)
 
VALUE rb_vm_invoke_proc_with_self (rb_execution_context_t *ec, rb_proc_t *proc, VALUE self, int argc, const VALUE *argv, int kw_splat, VALUE passed_block_handler)
 
VALUE rb_backref_get (void)
 
void rb_backref_set (VALUE val)
 
VALUE rb_lastline_get (void)
 
void rb_lastline_set (VALUE val)
 
const char * rb_sourcefile (void)
 
int rb_sourceline (void)
 
VALUE rb_source_location (int *pline)
 
const char * rb_source_location_cstr (int *pline)
 
rb_cref_trb_vm_cref (void)
 
rb_cref_trb_vm_cref_replace_with_duplicated_cref (void)
 
const rb_cref_trb_vm_cref_in_context (VALUE self, VALUE cbase)
 
VALUE rb_vm_cbase (void)
 
void rb_vm_localjump_error (const char *mesg, VALUE value, int reason)
 
VALUE rb_vm_make_jump_tag_but_local_jump (int state, VALUE val)
 
void rb_vm_jump_tag_but_local_jump (int state)
 
void rb_iter_break (void)
 
void rb_iter_break_value (VALUE val)
 
int rb_vm_check_optimizable_mid (VALUE mid)
 
void rb_vm_check_redefinition_by_prepend (VALUE klass)
 
VALUE rb_iseq_eval (const rb_iseq_t *iseq)
 
VALUE rb_iseq_eval_main (const rb_iseq_t *iseq)
 
int rb_vm_control_frame_id_and_class (const rb_control_frame_t *cfp, ID *idp, ID *called_idp, VALUE *klassp)
 
int rb_ec_frame_method_id_and_class (const rb_execution_context_t *ec, ID *idp, ID *called_idp, VALUE *klassp)
 
int rb_frame_method_id_and_class (ID *idp, VALUE *klassp)
 
VALUE rb_vm_call_cfunc (VALUE recv, VALUE(*func)(VALUE), VALUE arg, VALUE block_handler, VALUE filename)
 
void rb_vm_update_references (void *ptr)
 
void rb_vm_each_stack_value (void *ptr, void(*cb)(VALUE, void *), void *ctx)
 
void rb_vm_mark (void *ptr)
 
void rb_vm_register_special_exception_str (enum ruby_special_exceptions sp, VALUE cls, VALUE mesg)
 
int rb_vm_add_root_module (VALUE module)
 
int ruby_vm_destruct (rb_vm_t *vm)
 
void rb_execution_context_update (const rb_execution_context_t *ec)
 
void rb_execution_context_mark (const rb_execution_context_t *ec)
 
void rb_fiber_mark_self (rb_fiber_t *fib)
 
void rb_fiber_update_self (rb_fiber_t *fib)
 
void rb_threadptr_root_fiber_setup (rb_thread_t *th)
 
void rb_threadptr_root_fiber_release (rb_thread_t *th)
 
VALUE rb_obj_is_thread (VALUE obj)
 
void rb_ec_set_vm_stack (rb_execution_context_t *ec, VALUE *stack, size_t size)
 
void rb_ec_initialize_vm_stack (rb_execution_context_t *ec, VALUE *stack, size_t size)
 
void rb_ec_clear_vm_stack (rb_execution_context_t *ec)
 
VALUE rb_thread_alloc (VALUE klass)
 
void Init_VM (void)
 
void rb_vm_set_progname (VALUE filename)
 
void Init_BareVM (void)
 
void Init_vm_objects (void)
 
VALUE rb_vm_top_self (void)
 
void Init_top_self (void)
 
VALUErb_ruby_verbose_ptr (void)
 
VALUErb_ruby_debug_ptr (void)
 
VALUE rb_insn_operand_intern (const rb_iseq_t *iseq, VALUE insn, int op_no, VALUE op, int len, size_t pos, VALUE *pnop, VALUE child)
 
st_tablerb_vm_fstring_table (void)
 
 MAYBE_UNUSED (static void(*ruby_vm_collect_usage_func_insn)(int insn))=0
 
 MAYBE_UNUSED (static void(*ruby_vm_collect_usage_func_operand)(int insn, int n, VALUE op))=0
 
 MAYBE_UNUSED (static void(*ruby_vm_collect_usage_func_register)(int reg, int isset))=0
 
const struct rb_callcacherb_vm_empty_cc (void)
 

Variables

VALUE rb_cRubyVM
 
VALUE rb_cThread
 
VALUE rb_mRubyVMFrozenCore
 
VALUE rb_block_param_proxy
 
VALUE ruby_vm_const_missing_count = 0
 
rb_vm_truby_current_vm_ptr = NULL
 
rb_ractor_truby_single_main_ractor
 
native_tls_key_t ruby_current_ec_key
 
rb_event_flag_t ruby_vm_event_flags
 
rb_event_flag_t ruby_vm_event_enabled_global_flags
 
unsigned int ruby_vm_event_local_num
 
rb_serial_t ruby_vm_global_constant_state = 1
 
rb_serial_t ruby_vm_class_serial = 1
 
const rb_data_type_t ruby_threadptr_data_type
 
VALUErb_gc_stack_start
 
size_t rb_gc_stack_maxsize
 
const struct st_hash_type rb_fstring_hash_type
 

Macro Definition Documentation

◆ C

#define C (   k)    add_opt_method(rb_c##k, mid, bop)

◆ OP

#define OP (   mid_,
  bop_ 
)    (mid = id##mid_, bop = BOP_##bop_, ruby_vm_redefined_flag[bop] = 0)

◆ PROCDEBUG

#define PROCDEBUG   0

Definition at line 363 of file vm.c.

◆ REWIND_CFP

#define REWIND_CFP (   expr)
Value:
do { \
rb_execution_context_t *ec__ = GET_EC(); \
VALUE *const curr_sp = (ec__->cfp++)->sp; \
VALUE *const saved_sp = ec__->cfp->sp; \
ec__->cfp->sp = curr_sp; \
expr; \
(ec__->cfp--)->sp = saved_sp; \
} while (0)
rb_control_frame_t * cfp
Definition: vm_core.h:858
unsigned long VALUE
Definition: value.h:38

Definition at line 3121 of file vm.c.

◆ ruby_vm_redefined_flag

#define ruby_vm_redefined_flag   GET_VM()->redefined_flag

Definition at line 378 of file vm.c.

◆ S

#define S (   s)    sym_##s = ID2SYM(rb_intern_const(#s))

◆ SET [1/2]

#define SET (   name)    rb_hash_aset(result, ID2SYM(rb_intern(#name)), SIZET2NUM(vm->default_params.name));

◆ SET [2/2]

#define SET (   name,
  attr 
)
Value:
if (key == sym_##name) \
return SERIALT2NUM(attr); \
else if (hash != Qnil) \
rb_hash_aset(hash, sym_##name, SERIALT2NUM(attr));
const char * name
Definition: nkf.c:208
#define SERIALT2NUM
Definition: serial.h:20
#define Qnil

◆ thread_data_type

#define thread_data_type   ruby_threadptr_data_type

Definition at line 2990 of file vm.c.

◆ vm_exec

#define vm_exec   rb_vm_exec

Definition at line 11 of file vm.c.

Function Documentation

◆ Init_BareVM()

void Init_BareVM ( void  )

◆ Init_top_self()

void Init_top_self ( void  )

◆ Init_VM()

void Init_VM ( void  )

Definition at line 3342 of file vm.c.

References rb_iseq_struct::body, rb_execution_context_struct::cfp, CLASS_OF, rb_thread_struct::ec, rb_control_frame_struct::ep, FALSE, id_core_hash_merge_kwd, id_core_hash_merge_ptr, id_core_raise, id_core_set_method_alias, id_core_set_postexe, id_core_set_variable_alias, id_core_undef_method, Init_vm_backtrace(), rb_control_frame_struct::iseq, rb_iseq_constant_body::iseq_encoded, rb_vm_struct::main_ractor, rb_vm_struct::main_thread, METHOD_VISI_PRIVATE, METHOD_VISI_PUBLIC, NULL, rb_vm_struct::objspace, OPTIMIZED_METHOD_TYPE_BLOCK_CALL, rb_control_frame_struct::pc, Qnil, rb_vm_struct::ractor, rb_thread_struct::ractor, rb_add_method(), rb_ary_new(), rb_ary_push(), rb_binding_new(), rb_block_param_proxy, rb_cBasicObject, rb_class_new(), rb_cObject, rb_cRubyVM, rb_cThread, rb_define_class(), rb_define_const(), rb_define_global_const(), rb_define_method, rb_define_method_id, rb_define_module_under(), rb_define_singleton_method, rb_fstring_lit, rb_gc_register_mark_object(), rb_insns_name_array(), rb_iseq_new(), rb_mRubyVMFrozenCore, rb_obj_alloc(), rb_obj_freeze(), rb_objspace_gc_enable(), rb_ractor_main_setup(), rb_set_class_path(), rb_singleton_class(), rb_str_new2, rb_undef_alloc_func(), rb_undef_method(), rb_vm_top_self(), RBASIC, ruby_current_vm_ptr, rb_vm_struct::self, rb_control_frame_struct::self, rb_thread_struct::self, T_ICLASS, thread_data_type, rb_thread_struct::top_self, rb_thread_struct::top_wrapper, TypedData_Wrap_Struct, rb_thread_struct::vm, VM_ENV_DATA_INDEX_ME_CREF, VM_FRAME_FLAG_CFRAME, and VM_METHOD_TYPE_OPTIMIZED.

◆ Init_vm_objects()

void Init_vm_objects ( void  )

◆ MAYBE_UNUSED() [1/3]

MAYBE_UNUSED ( static void(*)(int insn)  ruby_vm_collect_usage_func_insn)
pure virtual

◆ MAYBE_UNUSED() [2/3]

MAYBE_UNUSED ( static void(*)(int insn, int n, VALUE op)  ruby_vm_collect_usage_func_operand)
pure virtual

◆ MAYBE_UNUSED() [3/3]

MAYBE_UNUSED ( static void(*)(int reg, int isset)  ruby_vm_collect_usage_func_register)
pure virtual

References rb_insns_name().

◆ rb_backref_get()

VALUE rb_backref_get ( void  )

◆ rb_backref_set()

void rb_backref_set ( VALUE  val)

◆ rb_binding_add_dynavars()

const VALUE * rb_binding_add_dynavars ( VALUE  bindval,
rb_binding_t bind,
int  dyncount,
const ID dynvars 
)

◆ rb_dtrace_setup()

int rb_dtrace_setup ( rb_execution_context_t ec,
VALUE  klass,
ID  id,
struct ruby_dtrace_method_hook_args args 
)

◆ rb_ec_clear_vm_stack()

void rb_ec_clear_vm_stack ( rb_execution_context_t ec)

Definition at line 3047 of file vm.c.

References rb_execution_context_struct::cfp, NULL, and rb_ec_set_vm_stack().

Referenced by rb_threadptr_root_fiber_terminate().

◆ rb_ec_frame_method_id_and_class()

int rb_ec_frame_method_id_and_class ( const rb_execution_context_t ec,
ID idp,
ID called_idp,
VALUE klassp 
)

◆ rb_ec_initialize_vm_stack()

void rb_ec_initialize_vm_stack ( rb_execution_context_t ec,
VALUE stack,
size_t  size 
)

◆ rb_ec_set_vm_stack()

void rb_ec_set_vm_stack ( rb_execution_context_t ec,
VALUE stack,
size_t  size 
)
inline

◆ rb_execution_context_mark()

void rb_execution_context_mark ( const rb_execution_context_t ec)

◆ rb_execution_context_update()

void rb_execution_context_update ( const rb_execution_context_t ec)

◆ rb_fiber_mark_self()

void rb_fiber_mark_self ( rb_fiber_t fib)

◆ rb_fiber_update_self()

void rb_fiber_update_self ( rb_fiber_t fib)

◆ rb_frame_method_id_and_class()

int rb_frame_method_id_and_class ( ID idp,
VALUE klassp 
)

Definition at line 2446 of file vm.c.

References rb_ec_frame_method_id_and_class().

◆ rb_insn_operand_intern()

VALUE rb_insn_operand_intern ( const rb_iseq_t iseq,
VALUE  insn,
int  op_no,
VALUE  op,
int  len,
size_t  pos,
VALUE pnop,
VALUE  child 
)

◆ rb_iseq_eval()

VALUE rb_iseq_eval ( const rb_iseq_t iseq)

Definition at line 2403 of file vm.c.

References vm_exec.

Referenced by rb_load_with_builtin_functions().

◆ rb_iseq_eval_main()

VALUE rb_iseq_eval_main ( const rb_iseq_t iseq)

Definition at line 2413 of file vm.c.

References vm_exec.

◆ rb_iseq_local_variables()

VALUE rb_iseq_local_variables ( const rb_iseq_t iseq)

Definition at line 885 of file vm.c.

References rb_iseq_struct::body, and rb_iseq_constant_body::parent_iseq.

Referenced by rb_iseqw_local_variables().

◆ rb_iter_break()

void rb_iter_break ( void  )

Definition at line 1786 of file vm.c.

References Qnil.

Referenced by DEFINE_ENUMFUNCS().

◆ rb_iter_break_value()

void rb_iter_break_value ( VALUE  val)

Definition at line 1792 of file vm.c.

◆ rb_lastline_get()

VALUE rb_lastline_get ( void  )

Definition at line 1556 of file vm.c.

References VM_SVAR_LASTLINE.

Referenced by rb_io_print(), and rb_reg_match2().

◆ rb_lastline_set()

void rb_lastline_set ( VALUE  val)

Definition at line 1562 of file vm.c.

References VM_SVAR_LASTLINE.

Referenced by rb_gets().

◆ rb_next_class_serial()

rb_serial_t rb_next_class_serial ( void  )

Definition at line 366 of file vm.c.

References NEXT_CLASS_SERIAL.

◆ rb_obj_is_thread()

VALUE rb_obj_is_thread ( VALUE  obj)

Definition at line 3003 of file vm.c.

References Qfalse, Qtrue, rb_typeddata_is_kind_of(), and thread_data_type.

Referenced by rb_objspace_call_finalizer().

◆ rb_proc_dup()

VALUE rb_proc_dup ( VALUE  self)

◆ rb_proc_isolate()

VALUE rb_proc_isolate ( VALUE  self)

Definition at line 1097 of file vm.c.

References rb_proc_dup(), and rb_proc_isolate_bang().

◆ rb_proc_isolate_bang()

VALUE rb_proc_isolate_bang ( VALUE  self)

◆ rb_proc_ractor_make_shareable()

VALUE rb_proc_ractor_make_shareable ( VALUE  self)

◆ rb_ruby_debug_ptr()

VALUE * rb_ruby_debug_ptr ( void  )

Definition at line 3775 of file vm.c.

References rb_ractor_struct::debug.

◆ rb_ruby_verbose_ptr()

VALUE * rb_ruby_verbose_ptr ( void  )

Definition at line 3768 of file vm.c.

References rb_ractor_struct::verbose.

◆ rb_source_location()

VALUE rb_source_location ( int pline)

◆ rb_source_location_cstr()

const char * rb_source_location_cstr ( int pline)

Definition at line 1616 of file vm.c.

References NIL_P, NULL, rb_source_location(), and RSTRING_PTR.

Referenced by rb_bug_for_fatal_signal(), rb_bug_without_die(), and rb_dtrace_setup().

◆ rb_sourcefile()

const char * rb_sourcefile ( void  )

◆ rb_sourceline()

int rb_sourceline ( void  )

◆ rb_str_concat_literals()

VALUE rb_str_concat_literals ( size_t  num,
const VALUE strary 
)

Definition at line 3127 of file string.c.

◆ rb_thread_alloc()

VALUE rb_thread_alloc ( VALUE  klass)

Definition at line 3114 of file vm.c.

Referenced by rb_thread_create(), and rb_thread_create_ractor().

◆ rb_threadptr_root_fiber_release()

void rb_threadptr_root_fiber_release ( rb_thread_t th)

◆ rb_threadptr_root_fiber_setup()

void rb_threadptr_root_fiber_setup ( rb_thread_t th)

◆ rb_vm_add_root_module()

int rb_vm_add_root_module ( VALUE  module)

◆ rb_vm_block_copy()

void rb_vm_block_copy ( VALUE  obj,
const struct rb_block dst,
const struct rb_block src 
)

◆ rb_vm_block_ep_update()

void rb_vm_block_ep_update ( VALUE  obj,
const struct rb_block dst,
const VALUE ep 
)

Definition at line 326 of file vm.c.

References rb_block::as, rb_block::captured, rb_captured_block::ep, Qundef, and RB_OBJ_WRITTEN.

Referenced by rb_vm_block_copy().

◆ rb_vm_call_cfunc()

VALUE rb_vm_call_cfunc ( VALUE  recv,
VALUE(*)(VALUE func,
VALUE  arg,
VALUE  block_handler,
VALUE  filename 
)

◆ rb_vm_cbase()

VALUE rb_vm_cbase ( void  )

◆ rb_vm_cframe_keyword_p()

int rb_vm_cframe_keyword_p ( const rb_control_frame_t cfp)

Definition at line 120 of file vm.c.

Referenced by rb_keyword_given_p().

◆ rb_vm_check_optimizable_mid()

int rb_vm_check_optimizable_mid ( VALUE  mid)

Definition at line 1823 of file vm.c.

References FALSE, NULL, and st_lookup.

◆ rb_vm_check_redefinition_by_prepend()

void rb_vm_check_redefinition_by_prepend ( VALUE  klass)

Definition at line 1873 of file vm.c.

References rb_id_table_foreach(), RCLASS_M_TBL, and RCLASS_ORIGIN.

Referenced by rb_prepend_module().

◆ rb_vm_control_frame_id_and_class()

int rb_vm_control_frame_id_and_class ( const rb_control_frame_t cfp,
ID idp,
ID called_idp,
VALUE klassp 
)

◆ rb_vm_cref()

rb_cref_t * rb_vm_cref ( void  )

Definition at line 1624 of file vm.c.

◆ rb_vm_cref_in_context()

const rb_cref_t * rb_vm_cref_in_context ( VALUE  self,
VALUE  cbase 
)

◆ rb_vm_cref_new_toplevel()

rb_cref_t * rb_vm_cref_new_toplevel ( void  )

Definition at line 309 of file vm.c.

◆ rb_vm_cref_replace_with_duplicated_cref()

rb_cref_t * rb_vm_cref_replace_with_duplicated_cref ( void  )

◆ rb_vm_each_stack_value()

void rb_vm_each_stack_value ( void *  ptr,
void(*)(VALUE, void *)  cb,
void *  ctx 
)

◆ rb_vm_empty_cc()

const struct rb_callcache * rb_vm_empty_cc ( void  )

Definition at line 4100 of file vm.c.

Referenced by rb_iseq_mark().

◆ rb_vm_env_local_variables()

VALUE rb_vm_env_local_variables ( const rb_env_t env)

Definition at line 876 of file vm.c.

References env.

◆ rb_vm_env_prev_env()

const rb_env_t * rb_vm_env_prev_env ( const rb_env_t env)

Definition at line 830 of file vm.c.

References env, and NULL.

Referenced by rb_vmdebug_env_dump_raw().

◆ rb_vm_ep_local_ep()

const VALUE * rb_vm_ep_local_ep ( const VALUE ep)

Definition at line 93 of file vm.c.

Referenced by rb_vm_proc_local_ep().

◆ rb_vm_frame_block_handler()

VALUE rb_vm_frame_block_handler ( const rb_control_frame_t cfp)

◆ rb_vm_fstring_table()

st_table * rb_vm_fstring_table ( void  )

Definition at line 3787 of file vm.c.

Referenced by Init_String(), and rb_str_free().

◆ rb_vm_get_binding_creatable_next_cfp()

rb_control_frame_t * rb_vm_get_binding_creatable_next_cfp ( const rb_execution_context_t ec,
const rb_control_frame_t cfp 
)

◆ rb_vm_get_ruby_level_next_cfp()

rb_control_frame_t * rb_vm_get_ruby_level_next_cfp ( const rb_execution_context_t ec,
const rb_control_frame_t cfp 
)

◆ rb_vm_inc_const_missing_count()

void rb_vm_inc_const_missing_count ( void  )

Definition at line 425 of file vm.c.

References ruby_vm_const_missing_count.

Referenced by rb_const_missing().

◆ rb_vm_invoke_bmethod()

VALUE rb_vm_invoke_bmethod ( rb_execution_context_t ec,
rb_proc_t proc,
VALUE  self,
int  argc,
const VALUE argv,
int  kw_splat,
VALUE  block_handler,
const rb_callable_method_entry_t me 
)

Definition at line 1468 of file vm.c.

References argc, argv, rb_block::proc, and TRUE.

Referenced by rb_vm_invoke_proc(), and rb_vm_invoke_proc_with_self().

◆ rb_vm_invoke_proc()

VALUE rb_vm_invoke_proc ( rb_execution_context_t ec,
rb_proc_t proc,
int  argc,
const VALUE argv,
int  kw_splat,
VALUE  passed_block_handler 
)

◆ rb_vm_invoke_proc_with_self()

VALUE rb_vm_invoke_proc_with_self ( rb_execution_context_t ec,
rb_proc_t proc,
VALUE  self,
int  argc,
const VALUE argv,
int  kw_splat,
VALUE  passed_block_handler 
)

Definition at line 1490 of file vm.c.

References argc, argv, NULL, rb_block::proc, and rb_vm_invoke_bmethod().

◆ rb_vm_jump_tag_but_local_jump()

void rb_vm_jump_tag_but_local_jump ( int  state)

Definition at line 1750 of file vm.c.

References EC_JUMP_TAG, NIL_P, Qundef, rb_exc_raise(), and rb_vm_make_jump_tag_but_local_jump().

◆ rb_vm_localjump_error()

void rb_vm_localjump_error ( const char *  mesg,
VALUE  value,
int  reason 
)

Definition at line 1711 of file vm.c.

References rb_exc_raise().

Referenced by rb_need_block().

◆ rb_vm_make_binding()

VALUE rb_vm_make_binding ( const rb_execution_context_t ec,
const rb_control_frame_t src_cfp 
)

◆ rb_vm_make_jump_tag_but_local_jump()

VALUE rb_vm_make_jump_tag_but_local_jump ( int  state,
VALUE  val 
)

Definition at line 1718 of file vm.c.

References Qnil, Qundef, TAG_BREAK, TAG_NEXT, TAG_REDO, TAG_RETRY, and TAG_RETURN.

Referenced by rb_fiber_start(), and rb_vm_jump_tag_but_local_jump().

◆ rb_vm_make_proc_lambda()

VALUE rb_vm_make_proc_lambda ( const rb_execution_context_t ec,
const struct rb_captured_block captured,
VALUE  klass,
int8_t  is_lambda 
)

◆ rb_vm_mark()

void rb_vm_mark ( void *  ptr)

◆ rb_vm_pop_cfunc_frame()

void rb_vm_pop_cfunc_frame ( void  )

◆ rb_vm_register_special_exception_str()

void rb_vm_register_special_exception_str ( enum ruby_special_exceptions  sp,
VALUE  cls,
VALUE  mesg 
)

◆ rb_vm_rewind_cfp()

void rb_vm_rewind_cfp ( rb_execution_context_t ec,
rb_control_frame_t cfp 
)

◆ rb_vm_set_progname()

void rb_vm_set_progname ( VALUE  filename)

◆ rb_vm_stack_to_heap()

void rb_vm_stack_to_heap ( rb_execution_context_t ec)

◆ rb_vm_top_self()

VALUE rb_vm_top_self ( void  )

◆ rb_vm_update_references()

void rb_vm_update_references ( void *  ptr)

◆ ruby_vm_at_exit()

void ruby_vm_at_exit ( void(*)(ruby_vm_t *)  func)

ruby_vm_at_exit registers a function func to be invoked when a VM passed away.

Functions registered this way runs in reverse order of registration, just like END {} block does. The difference is its timing to be triggered. ruby_vm_at_exit functions runs when a VM passed away, while END {} blocks runs just before a VM is passing away.

You cannot register a function to another VM than where you are in. So where to register is intuitive, omitted. OTOH the argument func cannot know which VM it is in because at the time of invocation, the VM has already died and there is no execution context. The VM itself is passed as the first argument to it.

Parameters
[in]functhe function to register.

Definition at line 658 of file vm.c.

References ALLOC, rb_vm_struct::at_exit, rb_at_exit_list::func, and rb_at_exit_list::next.

◆ ruby_vm_destruct()

int ruby_vm_destruct ( rb_vm_t vm)

◆ vm_exec()

VALUE vm_exec ( rb_execution_context_t ec,
bool  mjit_enable_p 
)

Variable Documentation

◆ rb_block_param_proxy

VALUE rb_block_param_proxy

Definition at line 376 of file vm.c.

Referenced by Init_VM().

◆ rb_cRubyVM

VALUE rb_cRubyVM

Definition at line 373 of file vm.c.

Referenced by Init_ast(), Init_builtin(), Init_ISeq(), and Init_VM().

◆ rb_cThread

VALUE rb_cThread

◆ rb_fstring_hash_type

const struct st_hash_type rb_fstring_hash_type
extern

Definition at line 287 of file string.c.

Referenced by Init_vm_objects().

◆ rb_gc_stack_maxsize

size_t rb_gc_stack_maxsize
extern

◆ rb_gc_stack_start

VALUE* rb_gc_stack_start
extern

◆ rb_mRubyVMFrozenCore

VALUE rb_mRubyVMFrozenCore

Definition at line 375 of file vm.c.

Referenced by Init_VM(), and rb_exec_event_hooks().

◆ ruby_current_ec_key

native_tls_key_t ruby_current_ec_key

Definition at line 400 of file vm.c.

Referenced by rb_check_stack_overflow().

◆ ruby_current_vm_ptr

rb_vm_t* ruby_current_vm_ptr = NULL

Definition at line 380 of file vm.c.

Referenced by Init_BareVM(), Init_VM(), and ruby_vm_destruct().

◆ ruby_single_main_ractor

rb_ractor_t* ruby_single_main_ractor

Definition at line 381 of file vm.c.

Referenced by rb_ractor_main_alloc().

◆ ruby_threadptr_data_type

const rb_data_type_t ruby_threadptr_data_type
Initial value:
= {
"VM/thread",
{
thread_mark,
thread_free,
thread_memsize,
thread_compact,
},
}
@ RUBY_TYPED_FREE_IMMEDIATELY
Definition: rtypeddata.h:62

Definition at line 2991 of file vm.c.

◆ ruby_vm_class_serial

rb_serial_t ruby_vm_class_serial = 1

Definition at line 408 of file vm.c.

◆ ruby_vm_const_missing_count

VALUE ruby_vm_const_missing_count = 0

Definition at line 379 of file vm.c.

Referenced by rb_vm_inc_const_missing_count().

◆ ruby_vm_event_enabled_global_flags

rb_event_flag_t ruby_vm_event_enabled_global_flags

Definition at line 404 of file vm.c.

Referenced by rb_iseq_init_trace().

◆ ruby_vm_event_flags

rb_event_flag_t ruby_vm_event_flags

Definition at line 403 of file vm.c.

◆ ruby_vm_event_local_num

unsigned int ruby_vm_event_local_num

Definition at line 405 of file vm.c.

Referenced by rb_tracepoint_disable().

◆ ruby_vm_global_constant_state

rb_serial_t ruby_vm_global_constant_state = 1

Definition at line 407 of file vm.c.