Ruby  2.0.0p648(2015-12-16revision53162)
Macros | Functions | Variables
vm.c File Reference
#include "ruby/ruby.h"
#include "ruby/vm.h"
#include "ruby/st.h"
#include "ruby/encoding.h"
#include "internal.h"
#include "gc.h"
#include "vm_core.h"
#include "iseq.h"
#include "eval_intern.h"
#include "probes.h"
#include "probes_helper.h"
#include "vm_insnhelper.h"
#include "vm_insnhelper.c"
#include "vm_exec.h"
#include "vm_exec.c"
#include "vm_method.c"
#include "vm_eval.c"
#include <assert.h>

Go to the source code of this file.

Macros

#define BUFSIZE   0x100
 
#define PROCDEBUG   0
 
#define ENV_IN_HEAP_P(th, env)   (!((th)->stack <= (env) && (env) < ((th)->stack + (th)->stack_size)))
 
#define ENV_VAL(env)   ((env)[1])
 
#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 vm_free   0
 
#define SET(name)   rb_hash_aset(result, ID2SYM(rb_intern(#name)), SIZET2NUM(vm->default_params.name));
 
#define USE_THREAD_DATA_RECYCLE   1
 
#define RECYCLE_MAX   64
 
#define thread_data_type   ruby_threadptr_data_type
 
#define REWIND_CFP(expr)
 

Functions

static VALUEVM_EP_LEP (VALUE *ep)
 
VALUErb_vm_ep_local_ep (VALUE *ep)
 
static VALUEVM_CF_LEP (rb_control_frame_t *cfp)
 
static VALUEVM_CF_PREV_EP (rb_control_frame_t *cfp)
 
static rb_block_tVM_CF_BLOCK_PTR (rb_control_frame_t *cfp)
 
rb_block_trb_vm_control_frame_block_ptr (rb_control_frame_t *cfp)
 
static VALUE vm_invoke_proc (rb_thread_t *th, rb_proc_t *proc, VALUE self, VALUE defined_class, int argc, const VALUE *argv, const rb_block_t *blockptr)
 
static void thread_free (void *ptr)
 
void rb_vm_change_state (void)
 
static void vm_clear_global_method_cache (void)
 
static void vm_clear_all_inline_method_cache (void)
 
static void vm_clear_all_cache ()
 
void rb_vm_inc_const_missing_count (void)
 
static void vm_set_top_stack (rb_thread_t *th, VALUE iseqval)
 
static void vm_set_eval_stack (rb_thread_t *th, VALUE iseqval, const NODE *cref, rb_block_t *base_block)
 
static void vm_set_main_stack (rb_thread_t *th, VALUE iseqval)
 
rb_control_frame_trb_vm_get_binding_creatable_next_cfp (rb_thread_t *th, const rb_control_frame_t *cfp)
 
rb_control_frame_trb_vm_get_ruby_level_next_cfp (rb_thread_t *th, const rb_control_frame_t *cfp)
 
static rb_control_frame_tvm_get_ruby_level_caller_cfp (rb_thread_t *th, rb_control_frame_t *cfp)
 
void rb_vm_pop_cfunc_frame (void)
 
void rb_vm_rewind_cfp (rb_thread_t *th, rb_control_frame_t *cfp)
 
void rb_frame_pop (void)
 
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...
 
static void ruby_vm_run_at_exit_hooks (rb_vm_t *vm)
 
static void env_mark (void *const ptr)
 
static void env_free (void *const ptr)
 
static size_t env_memsize (const void *ptr)
 
static VALUE env_alloc (void)
 
static VALUE check_env_value (VALUE envval)
 
static int check_env (rb_env_t *const env)
 
static VALUE vm_make_env_each (rb_thread_t *const th, rb_control_frame_t *const cfp, VALUE *envptr, VALUE *const endptr)
 
static int collect_local_variables_in_iseq (rb_iseq_t *iseq, const VALUE ary)
 
static int collect_local_variables_in_env (rb_env_t *env, const VALUE ary)
 
static int vm_collect_local_variables_in_heap (rb_thread_t *th, VALUE *ep, VALUE ary)
 
static void vm_rewrite_ep_in_errinfo (rb_thread_t *th)
 
static VALUE vm_make_proc_from_block (rb_thread_t *th, rb_block_t *block)
 
static VALUE vm_make_env_object (rb_thread_t *th, rb_control_frame_t *cfp, VALUE *blockprocptr)
 
VALUE rb_vm_make_env_object (rb_thread_t *th, rb_control_frame_t *cfp)
 
void rb_vm_stack_to_heap (rb_thread_t *th)
 
VALUE rb_vm_make_proc (rb_thread_t *th, const rb_block_t *block, VALUE klass)
 
VALUE rb_vm_make_binding (rb_thread_t *th, const rb_control_frame_t *src_cfp)
 
static VALUE invoke_block_from_c (rb_thread_t *th, const rb_block_t *block, VALUE self, int argc, const VALUE *argv, const rb_block_t *blockptr, const NODE *cref, VALUE defined_class)
 
static const rb_block_tcheck_block (rb_thread_t *th)
 
static VALUE vm_yield_with_cref (rb_thread_t *th, int argc, const VALUE *argv, const NODE *cref)
 
static VALUE vm_yield (rb_thread_t *th, int argc, const VALUE *argv)
 
VALUE rb_vm_invoke_proc (rb_thread_t *th, rb_proc_t *proc, int argc, const VALUE *argv, const rb_block_t *blockptr)
 
static rb_control_frame_tvm_normal_frame (rb_thread_t *th, rb_control_frame_t *cfp)
 
static VALUE vm_cfp_svar_get (rb_thread_t *th, rb_control_frame_t *cfp, VALUE key)
 
static void vm_cfp_svar_set (rb_thread_t *th, rb_control_frame_t *cfp, VALUE key, const VALUE val)
 
static VALUE vm_svar_get (VALUE key)
 
static void vm_svar_set (VALUE key, VALUE val)
 
VALUE rb_backref_get (void)
 
void rb_backref_set (VALUE val)
 
VALUE rb_lastline_get (void)
 
void rb_lastline_set (VALUE val)
 
VALUE rb_sourcefilename (void)
 
const char * rb_sourcefile (void)
 
int rb_sourceline (void)
 
NODErb_vm_cref (void)
 
VALUE rb_vm_cbase (void)
 
static VALUE make_localjump_error (const char *mesg, VALUE value, int reason)
 
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)
 
 NORETURN (static void vm_iter_break(rb_thread_t *th, VALUE val))
 
static void vm_iter_break (rb_thread_t *th, VALUE val)
 
void rb_iter_break (void)
 
void rb_iter_break_value (VALUE val)
 
static int vm_redefinition_check_flag (VALUE klass)
 
static void rb_vm_check_redefinition_opt_method (const rb_method_entry_t *me, VALUE klass)
 
static int check_redefined_method (st_data_t key, st_data_t value, st_data_t data)
 
void rb_vm_check_redefinition_by_prepend (VALUE klass)
 
static void add_opt_method (VALUE klass, ID mid, VALUE bop)
 
static void vm_init_redefined_flag (void)
 
static VALUE vm_exec (rb_thread_t *th)
 
VALUE rb_iseq_eval (VALUE iseqval)
 
VALUE rb_iseq_eval_main (VALUE iseqval)
 
int rb_vm_control_frame_id_and_class (const rb_control_frame_t *cfp, ID *idp, VALUE *klassp)
 
int rb_thread_method_id_and_class (rb_thread_t *th, ID *idp, VALUE *klassp)
 
int rb_frame_method_id_and_class (ID *idp, VALUE *klassp)
 
VALUE rb_thread_current_status (const rb_thread_t *th)
 
VALUE rb_vm_call_cfunc (VALUE recv, VALUE(*func)(VALUE), VALUE arg, const rb_block_t *blockptr, VALUE filename)
 
static int vm_mark_each_thread_func (st_data_t key, st_data_t value, st_data_t dummy)
 
void vm_trace_mark_event_hooks (rb_hook_list_t *hooks)
 
void rb_vm_mark (void *ptr)
 
int ruby_vm_destruct (rb_vm_t *vm)
 
static size_t vm_memsize (const void *ptr)
 
static VALUE vm_default_params (void)
 
static size_t get_param (const char *name, size_t default_value, size_t min_value)
 
static void check_machine_stack_size (size_t *sizep)
 
static void vm_default_params_setup (rb_vm_t *vm)
 
static void vm_init2 (rb_vm_t *vm)
 
static VALUEthread_recycle_stack (size_t size)
 
void rb_thread_recycle_stack_release (VALUE *stack)
 
void rb_thread_mark (void *ptr)
 
static size_t thread_memsize (const void *ptr)
 
VALUE rb_obj_is_thread (VALUE obj)
 
static VALUE thread_alloc (VALUE klass)
 
static void th_init (rb_thread_t *th, VALUE self)
 
static VALUE ruby_thread_init (VALUE self)
 
VALUE rb_thread_alloc (VALUE klass)
 
static void vm_define_method (rb_thread_t *th, VALUE obj, ID id, VALUE iseqval, rb_num_t is_singleton, NODE *cref)
 
static VALUE m_core_define_method (VALUE self, VALUE cbase, VALUE sym, VALUE iseqval)
 
static VALUE m_core_define_singleton_method (VALUE self, VALUE cbase, VALUE sym, VALUE iseqval)
 
static VALUE m_core_set_method_alias (VALUE self, VALUE cbase, VALUE sym1, VALUE sym2)
 
static VALUE m_core_set_variable_alias (VALUE self, VALUE sym1, VALUE sym2)
 
static VALUE m_core_undef_method (VALUE self, VALUE cbase, VALUE sym)
 
static VALUE m_core_set_postexe (VALUE self, VALUE iseqval)
 
static VALUE m_core_hash_merge_ary (VALUE self, VALUE hash, VALUE ary)
 
static VALUE core_hash_merge (VALUE hash, long argc, const VALUE *argv)
 
static VALUE m_core_hash_from_ary (VALUE self, VALUE ary)
 
static VALUE m_core_hash_merge_ptr (int argc, VALUE *argv, VALUE recv)
 
static int kwmerge_ii (st_data_t *key, st_data_t *value, st_data_t arg, int existing)
 
static int kwmerge_i (VALUE key, VALUE value, VALUE hash)
 
static VALUE m_core_hash_merge_kwd (VALUE recv, VALUE hash, VALUE kw)
 
static VALUE sdr (void)
 
static VALUE nsdr (void)
 
void Init_VM (void)
 
void rb_vm_set_progname (VALUE filename)
 
struct rb_objspacerb_objspace_alloc (void)
 
void Init_BareVM (void)
 
static VALUE main_to_s (VALUE obj)
 
VALUE rb_vm_top_self (void)
 
void Init_top_self (void)
 
VALUEruby_vm_verbose_ptr (rb_vm_t *vm)
 
VALUEruby_vm_debug_ptr (rb_vm_t *vm)
 
VALUErb_ruby_verbose_ptr (void)
 
VALUErb_ruby_debug_ptr (void)
 
VALUE insn_operand_intern (rb_iseq_t *iseq, VALUE insn, int op_no, VALUE op, int len, size_t pos, VALUE *pnop, VALUE child)
 

Variables

VALUE rb_cRubyVM
 
VALUE rb_cThread
 
VALUE rb_cEnv
 
VALUE rb_mRubyVMFrozenCore
 
VALUE ruby_vm_const_missing_count = 0
 
char ruby_vm_redefined_flag [BOP_LAST_]
 
rb_thread_truby_current_thread = 0
 
rb_vm_truby_current_vm = 0
 
rb_event_flag_t ruby_vm_event_flags
 
static const rb_data_type_t env_data_type
 
static st_tablevm_opt_method_table = 0
 
static const rb_data_type_t vm_data_type
 
static VALUEthread_recycle_stack_slot [RECYCLE_MAX]
 
static int thread_recycle_stack_count = 0
 
const rb_data_type_t ruby_threadptr_data_type
 
VALUErb_gc_stack_start
 
size_t rb_gc_stack_maxsize
 
void(* ruby_vm_collect_usage_func_insn )(int insn) = NULL
 
void(* ruby_vm_collect_usage_func_operand )(int insn, int n, VALUE op) = NULL
 
void(* ruby_vm_collect_usage_func_register )(int reg, int isset) = NULL
 

Macro Definition Documentation

#define BUFSIZE   0x100

Definition at line 86 of file vm.c.

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

Referenced by vm_init_redefined_flag().

#define ENV_IN_HEAP_P (   th,
  env 
)    (!((th)->stack <= (env) && (env) < ((th)->stack + (th)->stack_size)))
#define ENV_VAL (   env)    ((env)[1])

Definition at line 301 of file vm.c.

Referenced by vm_collect_local_variables_in_heap(), and vm_make_env_each().

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

Referenced by vm_init_redefined_flag().

#define PROCDEBUG   0

Definition at line 87 of file vm.c.

Referenced by rb_vm_make_proc(), and vm_make_env_object().

#define RECYCLE_MAX   64

Definition at line 1814 of file vm.c.

Referenced by rb_thread_recycle_stack_release().

#define REWIND_CFP (   expr)
Value:
do { \
th__->cfp++; expr; th__->cfp--; \
} while (0)
struct rb_thread_struct rb_thread_t
static rb_thread_t * GET_THREAD(void)
Definition: vm_core.h:890

Definition at line 2114 of file vm.c.

Referenced by m_core_define_method(), m_core_define_singleton_method(), m_core_set_method_alias(), m_core_set_postexe(), m_core_set_variable_alias(), and m_core_undef_method().

Referenced by vm_default_params().

#define thread_data_type   ruby_threadptr_data_type

Definition at line 1986 of file vm.c.

Referenced by Init_VM(), rb_obj_is_thread(), and thread_alloc().

#define USE_THREAD_DATA_RECYCLE   1

Definition at line 1811 of file vm.c.

#define vm_free   0

Definition at line 1662 of file vm.c.

Function Documentation

static void add_opt_method ( VALUE  klass,
ID  mid,
VALUE  bop 
)
static
static const rb_block_t* check_block ( rb_thread_t th)
inlinestatic

Definition at line 724 of file vm.c.

References rb_thread_struct::cfp, Qnil, rb_vm_localjump_error(), and VM_CF_BLOCK_PTR().

Referenced by vm_yield(), and vm_yield_with_cref().

static int check_env ( rb_env_t *const  env)
static

Definition at line 379 of file vm.c.

References rb_env_t::block, check_env_value(), dp, rb_block_struct::ep, and rb_env_t::prev_envval.

Referenced by check_env_value().

static VALUE check_env_value ( VALUE  envval)
static

Definition at line 395 of file vm.c.

References check_env(), env, GetEnvPtr, Qnil, and rb_bug().

Referenced by check_env(), rb_vm_make_proc(), and vm_make_env_object().

static void check_machine_stack_size ( size_t *  sizep)
static

Definition at line 1753 of file vm.c.

References size.

Referenced by vm_default_params_setup().

static int check_redefined_method ( st_data_t  key,
st_data_t  value,
st_data_t  data 
)
static
static int collect_local_variables_in_env ( rb_env_t env,
const VALUE  ary 
)
static
static int collect_local_variables_in_iseq ( rb_iseq_t iseq,
const VALUE  ary 
)
static
static VALUE core_hash_merge ( VALUE  hash,
long  argc,
const VALUE argv 
)
static

Definition at line 2194 of file vm.c.

References argc, assert, hash(), i, and rb_hash_aset().

Referenced by m_core_hash_merge_ary(), and m_core_hash_merge_ptr().

static VALUE env_alloc ( void  )
static
static void env_free ( void *const  ptr)
static

Definition at line 334 of file vm.c.

References env, rb_env_t::env, RUBY_FREE_ENTER, RUBY_FREE_LEAVE, RUBY_FREE_UNLESS_NULL, and ruby_xfree().

static void env_mark ( void *const  ptr)
static
static size_t env_memsize ( const void *  ptr)
static

Definition at line 346 of file vm.c.

References env, rb_env_t::env, rb_env_t::env_size, and size.

static size_t get_param ( const char *  name,
size_t  default_value,
size_t  min_value 
)
static

Definition at line 1736 of file vm.c.

References getenv(), PRIdSIZE, result, RUBY_VM_SIZE_ALIGN, and val.

Referenced by vm_default_params_setup().

void Init_BareVM ( void  )
void Init_top_self ( void  )
void Init_VM ( void  )

Definition at line 2305 of file vm.c.

References rb_thread_struct::cfp, CLASS_OF, GET_THREAD(), GetISeqPtr, id_core_define_method, id_core_define_singleton_method, id_core_hash_from_ary, id_core_hash_merge_ary, id_core_hash_merge_kwd, id_core_hash_merge_ptr, 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_struct::iseq_encoded, rb_control_frame_struct::klass, rb_vm_struct::living_threads, m_core_define_method(), m_core_define_singleton_method(), m_core_hash_from_ary(), m_core_hash_merge_ary(), m_core_hash_merge_kwd(), m_core_hash_merge_ptr(), m_core_set_method_alias(), m_core_set_postexe(), m_core_set_variable_alias(), m_core_undef_method(), rb_vm_struct::main_thread, nsdr(), rb_control_frame_struct::pc, Qnil, rb_ary_new(), rb_ary_push(), rb_binding_new(), rb_block_lambda(), rb_block_proc(), rb_cBasicObject, rb_cEnv, rb_class_new(), rb_cObject, rb_cRubyVM, rb_cThread, rb_define_class(), rb_define_class_under(), rb_define_const(), rb_define_global_const(), rb_define_method_id(), rb_define_singleton_method(), rb_gc_register_mark_object(), rb_hash_new(), rb_insns_name_array(), rb_iseq_new(), rb_iv_set(), rb_mRubyVMFrozenCore, rb_obj_freeze(), rb_singleton_class(), rb_str_new2(), rb_thread_set_current, rb_undef_alloc_func(), rb_undef_method(), rb_vm_top_self(), RBASIC, ruby_current_vm, rb_vm_struct::running_thread, sdr(), rb_vm_struct::self, rb_control_frame_struct::self, rb_thread_struct::self, st_init_numtable(), st_insert(), T_ICLASS, thread_data_type, rb_thread_struct::thread_id, rb_thread_struct::top_self, rb_thread_struct::top_wrapper, TypedData_Wrap_Struct, rb_thread_struct::vm, vm_default_params(), vm_init_redefined_flag(), and VM_PROFILE_ATEXIT.

VALUE insn_operand_intern ( rb_iseq_t iseq,
VALUE  insn,
int  op_no,
VALUE  op,
int  len,
size_t  pos,
VALUE pnop,
VALUE  child 
)
static VALUE invoke_block_from_c ( rb_thread_t th,
const rb_block_t block,
VALUE  self,
int  argc,
const VALUE argv,
const rb_block_t blockptr,
const NODE cref,
VALUE  defined_class 
)
inlinestatic
static int kwmerge_i ( VALUE  key,
VALUE  value,
VALUE  hash 
)
static

Definition at line 2242 of file vm.c.

References Check_Type, kwmerge_ii(), RHASH_TBL, ST_CONTINUE, st_update(), SYMBOL_P, and T_SYMBOL.

Referenced by m_core_hash_merge_kwd().

static int kwmerge_ii ( st_data_t key,
st_data_t value,
st_data_t  arg,
int  existing 
)
static

Definition at line 2234 of file vm.c.

References ST_CONTINUE, and ST_STOP.

Referenced by kwmerge_i().

static VALUE m_core_define_method ( VALUE  self,
VALUE  cbase,
VALUE  sym,
VALUE  iseqval 
)
static

Definition at line 2120 of file vm.c.

References GET_THREAD(), Qnil, rb_vm_cref(), REWIND_CFP, SYM2ID, and vm_define_method().

Referenced by Init_VM().

static VALUE m_core_define_singleton_method ( VALUE  self,
VALUE  cbase,
VALUE  sym,
VALUE  iseqval 
)
static

Definition at line 2129 of file vm.c.

References GET_THREAD(), Qnil, rb_vm_cref(), REWIND_CFP, SYM2ID, and vm_define_method().

Referenced by Init_VM().

static VALUE m_core_hash_from_ary ( VALUE  self,
VALUE  ary 
)
static
static VALUE m_core_hash_merge_ary ( VALUE  self,
VALUE  hash,
VALUE  ary 
)
static

Definition at line 2217 of file vm.c.

References core_hash_merge(), hash(), RARRAY_LEN, and RARRAY_PTR.

Referenced by Init_VM(), and m_core_hash_from_ary().

static VALUE m_core_hash_merge_kwd ( VALUE  recv,
VALUE  hash,
VALUE  kw 
)
static

Definition at line 2250 of file vm.c.

References hash(), kwmerge_i(), rb_convert_type(), rb_hash_foreach(), and T_HASH.

Referenced by Init_VM().

static VALUE m_core_hash_merge_ptr ( int  argc,
VALUE argv,
VALUE  recv 
)
static

Definition at line 2224 of file vm.c.

References core_hash_merge(), and hash().

Referenced by Init_VM().

static VALUE m_core_set_method_alias ( VALUE  self,
VALUE  cbase,
VALUE  sym1,
VALUE  sym2 
)
static

Definition at line 2138 of file vm.c.

References Qnil, rb_alias(), REWIND_CFP, and SYM2ID.

Referenced by Init_VM().

static VALUE m_core_set_postexe ( VALUE  self,
VALUE  iseqval 
)
static
static VALUE m_core_set_variable_alias ( VALUE  self,
VALUE  sym1,
VALUE  sym2 
)
static

Definition at line 2147 of file vm.c.

References Qnil, rb_alias_variable(), REWIND_CFP, and SYM2ID.

Referenced by Init_VM().

static VALUE m_core_undef_method ( VALUE  self,
VALUE  cbase,
VALUE  sym 
)
static

Definition at line 2156 of file vm.c.

References INC_VM_STATE_VERSION, Qnil, rb_undef(), REWIND_CFP, and SYM2ID.

Referenced by Init_VM().

static VALUE main_to_s ( VALUE  obj)
static

Definition at line 2488 of file vm.c.

References rb_str_new2().

Referenced by Init_top_self().

static VALUE make_localjump_error ( const char *  mesg,
VALUE  value,
int  reason 
)
static
NORETURN ( static void   vm_iter_breakrb_thread_t *th, VALUE val)
static VALUE nsdr ( void  )
static

Definition at line 2275 of file vm.c.

References free(), i, rb_ary_new(), rb_ary_push(), rb_memerror(), and rb_str_new2().

Referenced by Init_VM().

VALUE rb_backref_get ( void  )
void rb_backref_set ( VALUE  val)
int rb_frame_method_id_and_class ( ID idp,
VALUE klassp 
)

Definition at line 1558 of file vm.c.

References GET_THREAD(), and rb_thread_method_id_and_class().

void rb_frame_pop ( void  )

Definition at line 263 of file vm.c.

References GET_THREAD(), and vm_pop_frame().

VALUE rb_iseq_eval ( VALUE  iseqval)

Definition at line 1498 of file vm.c.

References GET_THREAD(), RB_GC_GUARD, val, vm_exec(), and vm_set_top_stack().

Referenced by iseq_eval(), and rb_load_internal().

VALUE rb_iseq_eval_main ( VALUE  iseqval)

Definition at line 1511 of file vm.c.

References GET_THREAD(), RB_GC_GUARD, val, vm_exec(), and vm_set_main_stack().

Referenced by ruby_exec_internal().

void rb_iter_break ( void  )
void rb_iter_break_value ( VALUE  val)

Definition at line 1034 of file vm.c.

References GET_THREAD(), and vm_iter_break().

VALUE rb_lastline_get ( void  )

Definition at line 842 of file vm.c.

References vm_svar_get().

Referenced by Init_IO(), rb_io_print(), rb_reg_match2(), and uscore_get().

void rb_lastline_set ( VALUE  val)
VALUE rb_obj_is_thread ( VALUE  obj)

Definition at line 1997 of file vm.c.

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

Referenced by rb_objspace_call_finalizer().

struct rb_objspace* rb_objspace_alloc ( void  )

Definition at line 374 of file gc.c.

References initial_malloc_limit, malloc, malloc_limit, ruby_gc_stress, and ruby_initial_gc_stress.

Referenced by Init_BareVM().

VALUE* rb_ruby_debug_ptr ( void  )

Definition at line 2531 of file vm.c.

References GET_VM, and ruby_vm_debug_ptr().

VALUE* rb_ruby_verbose_ptr ( void  )

Definition at line 2525 of file vm.c.

References GET_VM, and ruby_vm_verbose_ptr().

const char* rb_sourcefile ( void  )
VALUE rb_sourcefilename ( void  )
int rb_sourceline ( void  )
VALUE rb_thread_alloc ( VALUE  klass)

Definition at line 2071 of file vm.c.

References ruby_thread_init(), and thread_alloc().

Referenced by rb_thread_create(), thread_s_new(), and thread_start().

VALUE rb_thread_current_status ( const rb_thread_t th)
void rb_thread_mark ( void *  ptr)
int rb_thread_method_id_and_class ( rb_thread_t th,
ID idp,
VALUE klassp 
)
void rb_thread_recycle_stack_release ( VALUE stack)

Definition at line 1835 of file vm.c.

References RECYCLE_MAX, and ruby_xfree().

Referenced by thread_start_func_2().

VALUE rb_vm_call_cfunc ( VALUE  recv,
VALUE(*)(VALUE func,
VALUE  arg,
const rb_block_t blockptr,
VALUE  filename 
)
VALUE rb_vm_cbase ( void  )
void rb_vm_change_state ( void  )
void rb_vm_check_redefinition_by_prepend ( VALUE  klass)
static void rb_vm_check_redefinition_opt_method ( const rb_method_entry_t me,
VALUE  klass 
)
static
rb_block_t* rb_vm_control_frame_block_ptr ( rb_control_frame_t cfp)

Definition at line 61 of file vm.c.

References VM_CF_BLOCK_PTR().

Referenced by proc_new(), rb_block_given_p(), and rb_mod_refine().

int rb_vm_control_frame_id_and_class ( const rb_control_frame_t cfp,
ID idp,
VALUE klassp 
)
NODE* rb_vm_cref ( void  )
VALUE* rb_vm_ep_local_ep ( VALUE ep)

Definition at line 36 of file vm.c.

References VM_EP_LEP().

Referenced by rb_fiber_start().

rb_control_frame_t* rb_vm_get_binding_creatable_next_cfp ( rb_thread_t th,
const rb_control_frame_t cfp 
)
rb_control_frame_t* rb_vm_get_ruby_level_next_cfp ( rb_thread_t th,
const rb_control_frame_t cfp 
)
void rb_vm_inc_const_missing_count ( void  )

Definition at line 128 of file vm.c.

References ruby_vm_const_missing_count.

Referenced by rb_const_get_0().

VALUE rb_vm_invoke_proc ( rb_thread_t th,
rb_proc_t proc,
int  argc,
const VALUE argv,
const rb_block_t blockptr 
)
void rb_vm_jump_tag_but_local_jump ( int  state)

Definition at line 1007 of file vm.c.

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

Referenced by rb_load_internal().

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

Definition at line 968 of file vm.c.

References make_localjump_error(), and rb_exc_raise().

Referenced by check_block(), rb_need_block(), vm_invoke_block(), and vm_throw().

VALUE rb_vm_make_binding ( rb_thread_t th,
const rb_control_frame_t src_cfp 
)
VALUE rb_vm_make_env_object ( rb_thread_t th,
rb_control_frame_t cfp 
)

Definition at line 530 of file vm.c.

References vm_make_env_object().

Referenced by eval_string_with_cref(), rb_vm_stack_to_heap(), and vm_set_main_stack().

VALUE rb_vm_make_jump_tag_but_local_jump ( int  state,
VALUE  val 
)
VALUE rb_vm_make_proc ( rb_thread_t th,
const rb_block_t block,
VALUE  klass 
)
void rb_vm_mark ( void *  ptr)
void rb_vm_pop_cfunc_frame ( void  )
void rb_vm_rewind_cfp ( rb_thread_t th,
rb_control_frame_t cfp 
)
void rb_vm_set_progname ( VALUE  filename)
void rb_vm_stack_to_heap ( rb_thread_t th)
VALUE rb_vm_top_self ( void  )
static VALUE ruby_thread_init ( VALUE  self)
static
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 272 of file vm.c.

References at_exit, func, GET_VM, and rb_ary_push().

VALUE* ruby_vm_debug_ptr ( rb_vm_t vm)

Definition at line 2519 of file vm.c.

References rb_vm_struct::debug.

Referenced by rb_ruby_debug_ptr().

int ruby_vm_destruct ( rb_vm_t vm)
static void ruby_vm_run_at_exit_hooks ( rb_vm_t vm)
static

Definition at line 278 of file vm.c.

References rb_vm_struct::at_exit, func, RARRAY_LEN, rb_ary_free(), and rb_ary_pop().

Referenced by ruby_vm_destruct().

VALUE* ruby_vm_verbose_ptr ( rb_vm_t vm)

Definition at line 2513 of file vm.c.

References rb_vm_struct::verbose.

Referenced by rb_ruby_verbose_ptr().

static VALUE sdr ( void  )
static

Definition at line 2267 of file vm.c.

References Qnil, and rb_vm_bugreport().

Referenced by Init_VM().

static void th_init ( rb_thread_t th,
VALUE  self 
)
static
static VALUE thread_alloc ( VALUE  klass)
static

Definition at line 2008 of file vm.c.

References thread_data_type, TypedData_Make_Struct, and TypedData_Wrap_Struct.

Referenced by rb_thread_alloc().

static void thread_free ( void *  ptr)
static
static size_t thread_memsize ( const void *  ptr)
static
static VALUE* thread_recycle_stack ( size_t  size)
static

Definition at line 1819 of file vm.c.

References ALLOC_N, and thread_recycle_stack_count.

Referenced by th_init().

static rb_block_t* VM_CF_BLOCK_PTR ( rb_control_frame_t cfp)
inlinestatic
static VALUE* VM_CF_LEP ( rb_control_frame_t cfp)
inlinestatic
static VALUE* VM_CF_PREV_EP ( rb_control_frame_t cfp)
inlinestatic

Definition at line 48 of file vm.c.

References VM_EP_PREV_EP.

Referenced by rb_f_local_variables(), and vm_iter_break().

static VALUE vm_cfp_svar_get ( rb_thread_t th,
rb_control_frame_t cfp,
VALUE  key 
)
static

Definition at line 802 of file vm.c.

References lep_svar_get(), VM_CF_LEP(), and vm_normal_frame().

Referenced by vm_svar_get().

static void vm_cfp_svar_set ( rb_thread_t th,
rb_control_frame_t cfp,
VALUE  key,
const VALUE  val 
)
static

Definition at line 809 of file vm.c.

References lep_svar_set(), VM_CF_LEP(), and vm_normal_frame().

Referenced by vm_svar_set().

static void vm_clear_all_cache ( void  )
static
static void vm_clear_all_inline_method_cache ( void  )
static

Definition at line 111 of file vm.c.

Referenced by vm_clear_all_cache().

static void vm_clear_global_method_cache ( void  )
static

Referenced by vm_clear_all_cache().

static int vm_collect_local_variables_in_heap ( rb_thread_t th,
VALUE ep,
VALUE  ary 
)
static

Definition at line 512 of file vm.c.

References collect_local_variables_in_env(), env, ENV_IN_HEAP_P, ENV_VAL, and GetEnvPtr.

static VALUE vm_default_params ( void  )
static

Definition at line 1721 of file vm.c.

References GET_VM, rb_hash_new(), rb_obj_freeze(), result, and SET.

Referenced by Init_VM().

static void vm_default_params_setup ( rb_vm_t vm)
static
static void vm_define_method ( rb_thread_t th,
VALUE  obj,
ID  id,
VALUE  iseqval,
rb_num_t  is_singleton,
NODE cref 
)
static
static VALUE* VM_EP_LEP ( VALUE ep)
inlinestatic

Definition at line 25 of file vm.c.

References VM_EP_LEP_P, and VM_EP_PREV_EP.

Referenced by rb_vm_ep_local_ep(), and VM_CF_LEP().

static VALUE vm_exec ( rb_thread_t th)
static

Definition at line 1259 of file vm.c.

References rb_method_entry_struct::called_id, rb_iseq_struct::catch_table, rb_iseq_struct::catch_table_size, iseq_catch_table_entry::CATCH_TYPE_BREAK, iseq_catch_table_entry::CATCH_TYPE_ENSURE, iseq_catch_table_entry::CATCH_TYPE_NEXT, iseq_catch_table_entry::CATCH_TYPE_REDO, iseq_catch_table_entry::CATCH_TYPE_RESCUE, iseq_catch_table_entry::CATCH_TYPE_RETRY, rb_thread_struct::cfp, iseq_catch_table_entry::cont, iseq_catch_table_entry::end, rb_control_frame_struct::ep, err, rb_thread_struct::errinfo, EXEC_EVENT_HOOK, EXEC_EVENT_HOOK_AND_POP_FRAME, EXEC_TAG, GET_THROWOBJ_CATCH_POINT, GET_THROWOBJ_VAL, GetISeqPtr, i, iseq_catch_table_entry::iseq, rb_control_frame_struct::iseq, rb_iseq_struct::iseq_encoded, JUMP_TAG, rb_method_entry_struct::klass, rb_control_frame_struct::klass, rb_iseq_struct::local_size, rb_control_frame_struct::me, NULL, rb_control_frame_struct::pc, Qnil, result, RUBY_DTRACE_METHOD_RETURN_HOOK, RUBY_EVENT_B_RETURN, RUBY_EVENT_C_RETURN, RUBY_EVENT_END, RUBY_EVENT_RETURN, RUBY_VM_PREVIOUS_CONTROL_FRAME, rb_control_frame_struct::self, SET_THROWOBJ_CATCH_POINT, SET_THROWOBJ_STATE, iseq_catch_table_entry::sp, rb_control_frame_struct::sp, iseq_catch_table_entry::start, rb_thread_struct::state, TAG_BREAK, TAG_NEXT, TAG_RAISE, TAG_REDO, TAG_RETRY, TAG_RETURN, TH_POP_TAG, TH_POP_TAG2, TH_PUSH_TAG, iseq_catch_table_entry::type, type, UNLIKELY, vm_base_ptr(), VM_ENVVAL_PREV_EP_PTR, vm_exec_core(), VM_FRAME_MAGIC_BLOCK, VM_FRAME_MAGIC_CFUNC, VM_FRAME_MAGIC_CLASS, VM_FRAME_MAGIC_METHOD, VM_FRAME_MAGIC_RESCUE, VM_FRAME_TYPE, VM_FRAME_TYPE_FINISH_P, vm_pop_frame(), and vm_push_frame().

Referenced by invoke_block_from_c(), rb_iseq_eval(), and rb_iseq_eval_main().

static rb_control_frame_t* vm_get_ruby_level_caller_cfp ( rb_thread_t th,
rb_control_frame_t cfp 
)
static
static void vm_init2 ( rb_vm_t vm)
static
static void vm_init_redefined_flag ( void  )
static

Definition at line 1105 of file vm.c.

References AREF, C, DIV, MOD, OP, and st_init_numtable().

Referenced by Init_VM().

static VALUE vm_invoke_proc ( rb_thread_t th,
rb_proc_t proc,
VALUE  self,
VALUE  defined_class,
int  argc,
const VALUE argv,
const rb_block_t blockptr 
)
static
static void vm_iter_break ( rb_thread_t th,
VALUE  val 
)
static
static VALUE vm_make_env_each ( rb_thread_t *const  th,
rb_control_frame_t *const  cfp,
VALUE envptr,
VALUE *const  endptr 
)
static
static VALUE vm_make_env_object ( rb_thread_t th,
rb_control_frame_t cfp,
VALUE blockprocptr 
)
static
static VALUE vm_make_proc_from_block ( rb_thread_t th,
rb_block_t block 
)
static

Definition at line 600 of file vm.c.

References rb_block_struct::proc, rb_cProc, and rb_vm_make_proc().

Referenced by vm_make_env_object().

static int vm_mark_each_thread_func ( st_data_t  key,
st_data_t  value,
st_data_t  dummy 
)
static

Definition at line 1608 of file vm.c.

References rb_gc_mark(), and ST_CONTINUE.

Referenced by rb_vm_mark().

static size_t vm_memsize ( const void *  ptr)
static
static rb_control_frame_t* vm_normal_frame ( rb_thread_t th,
rb_control_frame_t cfp 
)
static
static int vm_redefinition_check_flag ( VALUE  klass)
static
static void vm_rewrite_ep_in_errinfo ( rb_thread_t th)
static
static void vm_set_eval_stack ( rb_thread_t th,
VALUE  iseqval,
const NODE cref,
rb_block_t base_block 
)
static
static void vm_set_main_stack ( rb_thread_t th,
VALUE  iseqval 
)
static
static void vm_set_top_stack ( rb_thread_t th,
VALUE  iseqval 
)
static
static VALUE vm_svar_get ( VALUE  key)
static

Definition at line 816 of file vm.c.

References rb_thread_struct::cfp, GET_THREAD(), and vm_cfp_svar_get().

Referenced by rb_backref_get(), and rb_lastline_get().

static void vm_svar_set ( VALUE  key,
VALUE  val 
)
static

Definition at line 823 of file vm.c.

References rb_thread_struct::cfp, GET_THREAD(), and vm_cfp_svar_set().

Referenced by rb_backref_set(), and rb_lastline_set().

void vm_trace_mark_event_hooks ( rb_hook_list_t hooks)
static VALUE vm_yield ( rb_thread_t th,
int  argc,
const VALUE argv 
)
inlinestatic
static VALUE vm_yield_with_cref ( rb_thread_t th,
int  argc,
const VALUE argv,
const NODE cref 
)
inlinestatic

Variable Documentation

const rb_data_type_t env_data_type
static
Initial value:
= {
"VM/env",
}
static size_t env_memsize(const void *ptr)
Definition: vm.c:346
static void env_mark(void *const ptr)
Definition: vm.c:304
static void env_free(void *const ptr)
Definition: vm.c:334

Definition at line 359 of file vm.c.

VALUE rb_cEnv

Definition at line 91 of file vm.c.

Referenced by env_alloc(), Init_VM(), and vm_rewrite_ep_in_errinfo().

VALUE rb_cRubyVM

Definition at line 89 of file vm.c.

Referenced by Init_ISeq(), and Init_VM().

VALUE rb_cThread

Definition at line 90 of file vm.c.

Referenced by Init_VM().

size_t rb_gc_stack_maxsize
VALUE* rb_gc_stack_start
VALUE rb_mRubyVMFrozenCore

Definition at line 92 of file vm.c.

Referenced by Init_VM(), mlambda(), mproc(), and rb_threadptr_exec_event_hooks_orig().

rb_thread_t* ruby_current_thread = 0

Definition at line 96 of file vm.c.

Referenced by GET_THREAD().

rb_vm_t* ruby_current_vm = 0

Definition at line 97 of file vm.c.

Referenced by Init_VM().

const rb_data_type_t ruby_threadptr_data_type
Initial value:
= {
"VM/thread",
{
},
}
static void thread_free(void *ptr)
Definition: vm.c:1926
static size_t thread_memsize(const void *ptr)
Definition: vm.c:1967
void rb_thread_mark(void *ptr)
Definition: vm.c:1857

Definition at line 1987 of file vm.c.

void(* ruby_vm_collect_usage_func_insn)(int insn) = NULL

Definition at line 2706 of file vm.c.

void(* ruby_vm_collect_usage_func_operand)(int insn, int n, VALUE op) = NULL

Definition at line 2707 of file vm.c.

void(* ruby_vm_collect_usage_func_register)(int reg, int isset) = NULL

Definition at line 2708 of file vm.c.

VALUE ruby_vm_const_missing_count = 0

Definition at line 94 of file vm.c.

Referenced by rb_vm_inc_const_missing_count().

rb_event_flag_t ruby_vm_event_flags

Definition at line 98 of file vm.c.

Referenced by recalc_add_ruby_vm_event_flags(), and recalc_remove_ruby_vm_event_flags().

char ruby_vm_redefined_flag[BOP_LAST_]

Definition at line 95 of file vm.c.

Referenced by rb_vm_check_redefinition_opt_method().

int thread_recycle_stack_count = 0
static

Definition at line 1816 of file vm.c.

Referenced by thread_recycle_stack().

VALUE* thread_recycle_stack_slot[RECYCLE_MAX]
static

Definition at line 1815 of file vm.c.

const rb_data_type_t vm_data_type
static
Initial value:
= {
"VM",
}
static size_t vm_memsize(const void *ptr)
Definition: vm.c:1698
void rb_vm_mark(void *ptr)
Definition: vm.c:1618
#define vm_free
Definition: vm.c:1662

Definition at line 1714 of file vm.c.

st_table* vm_opt_method_table = 0
static

Definition at line 1041 of file vm.c.