Ruby  2.4.2p198(2017-09-14revision59899)
Data Structures | Macros | Typedefs | Enumerations | Functions | Variables
vm_core.h File Reference
#include "ruby_assert.h"
#include "ruby/ruby.h"
#include "ruby/st.h"
#include "node.h"
#include "vm_debug.h"
#include "vm_opts.h"
#include "id.h"
#include "method.h"
#include "ruby_atomic.h"
#include "ccan/list/list.h"
#include "ruby/thread_native.h"
#include <setjmp.h>
#include <signal.h>
#include <varargs.h>
Include dependency graph for vm_core.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  iseq_inline_cache_entry
 
union  iseq_inline_storage_entry
 
struct  rb_call_info
 
struct  rb_call_info_kw_arg
 
struct  rb_call_info_with_kwarg
 
struct  rb_calling_info
 
struct  rb_call_cache
 
struct  rb_iseq_location_struct
 
struct  rb_iseq_constant_body
 
struct  rb_iseq_struct
 
struct  rb_at_exit_list
 
struct  rb_hook_list_struct
 
struct  rb_vm_struct
 
struct  rb_captured_block
 
struct  rb_block
 
struct  rb_control_frame_struct
 
struct  rb_vm_tag
 
struct  rb_vm_protect_tag
 
struct  rb_unblock_callback
 
struct  rb_thread_list_struct
 
struct  rb_ensure_entry
 
struct  rb_ensure_list
 
struct  rb_thread_struct
 
struct  rb_proc_t
 
struct  rb_env_t
 
struct  rb_binding_t
 
struct  rb_trace_arg_struct
 

Macros

#define VM_CHECK_MODE   0
 
#define VMDEBUG   0
 VM Debug Level. More...
 
#define VM_ASSERT(expr)   ((void)0)
 
#define VM_UNREACHABLE(func)   ((void)0)
 
#define RUBY_VM_THREAD_MODEL   2
 
#define ENABLE_VM_OBJSPACE   1
 
#define NSIG   (_SIGMAX + 1) /* For QNX */
 
#define RUBY_NSIG   NSIG
 
#define va_init_list(a, b)   va_start((a))
 
#define TAG_RETURN   RUBY_TAG_RETURN
 
#define TAG_BREAK   RUBY_TAG_BREAK
 
#define TAG_NEXT   RUBY_TAG_NEXT
 
#define TAG_RETRY   RUBY_TAG_RETRY
 
#define TAG_REDO   RUBY_TAG_REDO
 
#define TAG_RAISE   RUBY_TAG_RAISE
 
#define TAG_THROW   RUBY_TAG_THROW
 
#define TAG_FATAL   RUBY_TAG_FATAL
 
#define TAG_MASK   RUBY_TAG_MASK
 
#define CoreDataFromValue(obj, type)   (type*)DATA_PTR(obj)
 
#define GetCoreDataFromValue(obj, type, ptr)   ((ptr) = CoreDataFromValue((obj), type))
 
#define USE_LAZY_LOAD   0
 
#define GetVMPtr(obj, ptr)   GetCoreDataFromValue((obj), rb_vm_t, (ptr))
 
#define RUBY_VM_SIZE_ALIGN   4096
 
#define RUBY_VM_THREAD_VM_STACK_SIZE   ( 128 * 1024 * sizeof(VALUE)) /* 512 KB or 1024 KB */
 
#define RUBY_VM_THREAD_VM_STACK_SIZE_MIN   ( 2 * 1024 * sizeof(VALUE)) /* 8 KB or 16 KB */
 
#define RUBY_VM_THREAD_MACHINE_STACK_SIZE   ( 128 * 1024 * sizeof(VALUE)) /* 512 KB or 1024 KB */
 
#define RUBY_VM_THREAD_MACHINE_STACK_SIZE_MIN   ( 16 * 1024 * sizeof(VALUE)) /* 64 KB or 128 KB */
 
#define RUBY_VM_FIBER_VM_STACK_SIZE   ( 16 * 1024 * sizeof(VALUE)) /* 64 KB or 128 KB */
 
#define RUBY_VM_FIBER_VM_STACK_SIZE_MIN   ( 2 * 1024 * sizeof(VALUE)) /* 8 KB or 16 KB */
 
#define RUBY_VM_FIBER_MACHINE_STACK_SIZE   ( 64 * 1024 * sizeof(VALUE)) /* 256 KB or 512 KB */
 
#define RUBY_VM_FIBER_MACHINE_STACK_SIZE_MIN   ( 16 * 1024 * sizeof(VALUE)) /* 64 KB or 128 KB */
 
#define INTEGER_REDEFINED_OP_FLAG   (1 << 0)
 
#define FLOAT_REDEFINED_OP_FLAG   (1 << 1)
 
#define STRING_REDEFINED_OP_FLAG   (1 << 2)
 
#define ARRAY_REDEFINED_OP_FLAG   (1 << 3)
 
#define HASH_REDEFINED_OP_FLAG   (1 << 4)
 
#define SYMBOL_REDEFINED_OP_FLAG   (1 << 6)
 
#define TIME_REDEFINED_OP_FLAG   (1 << 7)
 
#define REGEXP_REDEFINED_OP_FLAG   (1 << 8)
 
#define NIL_REDEFINED_OP_FLAG   (1 << 9)
 
#define TRUE_REDEFINED_OP_FLAG   (1 << 10)
 
#define FALSE_REDEFINED_OP_FLAG   (1 << 11)
 
#define BASIC_OP_UNREDEFINED_P(op, klass)   (LIKELY((GET_VM()->redefined_flag[(op)]&(klass)) == 0))
 
#define VM_DEBUG_BP_CHECK   0
 
#define VM_DEBUG_VERIFY_METHOD_CACHE   (VM_DEBUG_MODE != 0)
 
#define GetThreadPtr(obj, ptr)   TypedData_Get_Struct((obj), rb_thread_t, &ruby_threadptr_data_type, (ptr))
 
#define VM_DEFINECLASS_TYPE(x)   ((rb_vm_defineclass_type_t)(x) & VM_DEFINECLASS_TYPE_MASK)
 
#define VM_DEFINECLASS_FLAG_SCOPED   0x08
 
#define VM_DEFINECLASS_FLAG_HAS_SUPERCLASS   0x10
 
#define VM_DEFINECLASS_SCOPED_P(x)   ((x) & VM_DEFINECLASS_FLAG_SCOPED)
 
#define VM_DEFINECLASS_HAS_SUPERCLASS_P(x)   ((x) & VM_DEFINECLASS_FLAG_HAS_SUPERCLASS)
 
#define GetProcPtr(obj, ptr)   GetCoreDataFromValue((obj), rb_proc_t, (ptr))
 
#define GetBindingPtr(obj, ptr)   GetCoreDataFromValue((obj), rb_binding_t, (ptr))
 
#define VM_CHECKMATCH_TYPE_MASK   0x03
 
#define VM_CHECKMATCH_ARRAY   0x04
 
#define VM_CALL_ARGS_SPLAT   (0x01 << 0) /* m(*args) */
 
#define VM_CALL_ARGS_BLOCKARG   (0x01 << 1) /* m(&block) */
 
#define VM_CALL_FCALL   (0x01 << 2) /* m(...) */
 
#define VM_CALL_VCALL   (0x01 << 3) /* m */
 
#define VM_CALL_ARGS_SIMPLE   (0x01 << 4) /* (ci->flag & (SPLAT|BLOCKARG)) && blockiseq == NULL && ci->kw_arg == NULL */
 
#define VM_CALL_BLOCKISEQ   (0x01 << 5) /* has blockiseq */
 
#define VM_CALL_KWARG   (0x01 << 6) /* has kwarg */
 
#define VM_CALL_TAILCALL   (0x01 << 7) /* located at tail position */
 
#define VM_CALL_SUPER   (0x01 << 8) /* super */
 
#define VM_CALL_OPT_SEND   (0x01 << 9) /* internal flag */
 
#define FUNC_FASTCALL(x)   x
 
#define VM_TAGGED_PTR_SET(p, tag)   ((VALUE)(p) | (tag))
 
#define VM_TAGGED_PTR_REF(v, mask)   ((void *)((v) & ~mask))
 
#define GC_GUARDED_PTR(p)   VM_TAGGED_PTR_SET((p), 0x01)
 
#define GC_GUARDED_PTR_REF(p)   VM_TAGGED_PTR_REF((p), 0x03)
 
#define GC_GUARDED_PTR_P(p)   (((VALUE)(p)) & 0x01)
 
#define VM_ENV_DATA_SIZE   ( 3)
 
#define VM_ENV_DATA_INDEX_ME_CREF   (-2) /* ep[-2] */
 
#define VM_ENV_DATA_INDEX_SPECVAL   (-1) /* ep[-1] */
 
#define VM_ENV_DATA_INDEX_FLAGS   ( 0) /* ep[ 0] */
 
#define VM_ENV_DATA_INDEX_ENV   ( 1) /* ep[ 1] */
 
#define VM_ENV_DATA_INDEX_ENV_PROC   ( 2) /* ep[ 2] */
 
#define VM_ENV_INDEX_LAST_LVAR   (-VM_ENV_DATA_SIZE)
 
#define RUBYVM_CFUNC_FRAME_P(cfp)   (VM_FRAME_TYPE(cfp) == VM_FRAME_MAGIC_CFUNC)
 
#define VM_GUARDED_PREV_EP(ep)   GC_GUARDED_PTR(ep)
 
#define VM_BLOCK_HANDLER_NONE   0
 
#define RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp)   ((cfp)+1)
 
#define RUBY_VM_NEXT_CONTROL_FRAME(cfp)   ((cfp)-1)
 
#define RUBY_VM_END_CONTROL_FRAME(th)   ((rb_control_frame_t *)((th)->stack + (th)->stack_size))
 
#define RUBY_VM_VALID_CONTROL_FRAME_P(cfp, ecfp)   ((void *)(ecfp) > (void *)(cfp))
 
#define RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(th, cfp)   (!RUBY_VM_VALID_CONTROL_FRAME_P((cfp), RUBY_VM_END_CONTROL_FRAME(th)))
 
#define SDR()   rb_vmdebug_stack_dump_raw(GET_THREAD(), GET_THREAD()->cfp)
 
#define SDR2(cfp)   rb_vmdebug_stack_dump_raw(GET_THREAD(), (cfp))
 
#define sysstack_error   GET_VM()->special_exceptions[ruby_error_sysstack]
 
#define RUBY_CONST_ASSERT(expr)   (1/!!(expr)) /* expr must be a compile-time constant */
 
#define VM_STACK_OVERFLOWED_P(cfp, sp, margin)
 
#define WHEN_VM_STACK_OVERFLOWED(cfp, sp, margin)   if (LIKELY(!VM_STACK_OVERFLOWED_P(cfp, sp, margin))) {(void)0;} else /* overflowed */
 
#define CHECK_VM_STACK_OVERFLOW0(cfp, sp, margin)   WHEN_VM_STACK_OVERFLOWED(cfp, sp, margin) vm_stackoverflow()
 
#define CHECK_VM_STACK_OVERFLOW(cfp, margin)   WHEN_VM_STACK_OVERFLOWED(cfp, (cfp)->sp, margin) vm_stackoverflow()
 
#define GET_VM()   ruby_current_vm
 
#define OPT_CALL_CFUNC_WITHOUT_FRAME   0
 
#define GET_THREAD()   vm_thread_with_frame(ruby_current_thread)
 
#define vm_thread_with_frame(th)   (th)
 
#define rb_thread_set_current_raw(th)   (void)(ruby_current_thread = (th))
 
#define rb_thread_set_current(th)
 
#define RUBY_VM_SET_TIMER_INTERRUPT(th)   ATOMIC_OR((th)->interrupt_flag, TIMER_INTERRUPT_MASK)
 
#define RUBY_VM_SET_INTERRUPT(th)   ATOMIC_OR((th)->interrupt_flag, PENDING_INTERRUPT_MASK)
 
#define RUBY_VM_SET_POSTPONED_JOB_INTERRUPT(th)   ATOMIC_OR((th)->interrupt_flag, POSTPONED_JOB_INTERRUPT_MASK)
 
#define RUBY_VM_SET_TRAP_INTERRUPT(th)   ATOMIC_OR((th)->interrupt_flag, TRAP_INTERRUPT_MASK)
 
#define RUBY_VM_INTERRUPTED(th)   ((th)->interrupt_flag & ~(th)->interrupt_mask & (PENDING_INTERRUPT_MASK|TRAP_INTERRUPT_MASK))
 
#define RUBY_VM_INTERRUPTED_ANY(th)   ((th)->interrupt_flag & ~(th)->interrupt_mask)
 
#define RUBY_VM_CHECK_INTS(th)   ruby_vm_check_ints(th)
 
#define EXEC_EVENT_HOOK_ORIG(th_, flag_, self_, id_, called_id_, klass_, data_, pop_p_)
 
#define EXEC_EVENT_HOOK(th_, flag_, self_, id_, called_id_, klass_, data_)   EXEC_EVENT_HOOK_ORIG(th_, flag_, self_, id_, called_id_, klass_, data_, 0)
 
#define EXEC_EVENT_HOOK_AND_POP_FRAME(th_, flag_, self_, id_, called_id_, klass_, data_)   EXEC_EVENT_HOOK_ORIG(th_, flag_, self_, id_, called_id_, klass_, data_, 1)
 

Typedefs

typedef unsigned long rb_num_t
 
typedef struct rb_compile_option_struct rb_compile_option_t
 
typedef VALUE(* vm_call_handler) (struct rb_thread_struct *th, struct rb_control_frame_struct *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc)
 
typedef struct rb_iseq_location_struct rb_iseq_location_t
 
typedef void rb_vm_at_exit_func(struct rb_vm_struct *)
 
typedef struct rb_at_exit_list rb_at_exit_list
 
typedef struct rb_hook_list_struct rb_hook_list_t
 
typedef struct rb_vm_struct rb_vm_t
 
typedef struct rb_control_frame_struct rb_control_frame_t
 
typedef RUBY_JMP_BUF rb_jmpbuf_t
 
typedef struct rb_thread_list_struct rb_thread_list_t
 
typedef struct rb_ensure_entry rb_ensure_entry_t
 
typedef struct rb_ensure_list rb_ensure_list_t
 
typedef char rb_thread_id_string_t[sizeof(rb_nativethread_id_t) *2+3]
 
typedef struct rb_fiber_struct rb_fiber_t
 
typedef struct rb_thread_struct rb_thread_t
 
typedef struct iseq_inline_cache_entryIC
 
typedef struct rb_call_infoCALL_INFO
 
typedef struct rb_call_cacheCALL_CACHE
 
typedef VALUE CDHASH
 
typedef rb_control_frame_t *FUNC_FASTCALL rb_insn_func_t(rb_thread_t *, rb_control_frame_t *)
 
typedef int rb_backtrace_iter_func(void *, VALUE, int, VALUE)
 

Enumerations

enum  ruby_tag_type {
  RUBY_TAG_RETURN = 0x1, RUBY_TAG_BREAK = 0x2, RUBY_TAG_NEXT = 0x3, RUBY_TAG_RETRY = 0x4,
  RUBY_TAG_REDO = 0x5, RUBY_TAG_RAISE = 0x6, RUBY_TAG_THROW = 0x7, RUBY_TAG_FATAL = 0x8,
  RUBY_TAG_MASK = 0xf
}
 
enum  ruby_vm_throw_flags { VM_THROW_NO_ESCAPE_FLAG = 0x8000, VM_THROW_LEVEL_SHIFT = 16, VM_THROW_STATE_MASK = 0xff }
 
enum  method_missing_reason {
  MISSING_NOENTRY = 0x00, MISSING_PRIVATE = 0x01, MISSING_PROTECTED = 0x02, MISSING_FCALL = 0x04,
  MISSING_VCALL = 0x08, MISSING_SUPER = 0x10, MISSING_MISSING = 0x20, MISSING_NONE = 0x40
}
 
enum  ruby_special_exceptions {
  ruby_error_reenter, ruby_error_nomemory, ruby_error_sysstack, ruby_error_stream_closed,
  ruby_special_error_count
}
 
enum  ruby_basic_operators {
  BOP_PLUS, BOP_MINUS, BOP_MULT, BOP_DIV,
  BOP_MOD, BOP_EQ, BOP_EQQ, BOP_LT,
  BOP_LE, BOP_LTLT, BOP_AREF, BOP_ASET,
  BOP_LENGTH, BOP_SIZE, BOP_EMPTY_P, BOP_SUCC,
  BOP_GT, BOP_GE, BOP_NOT, BOP_NEQ,
  BOP_MATCH, BOP_FREEZE, BOP_MAX, BOP_MIN,
  BOP_LAST_
}
 
enum  rb_block_handler_type { block_handler_type_iseq, block_handler_type_ifunc, block_handler_type_symbol, block_handler_type_proc }
 
enum  rb_block_type { block_type_iseq, block_type_ifunc, block_type_symbol, block_type_proc }
 
enum  rb_thread_status { THREAD_RUNNABLE, THREAD_STOPPED, THREAD_STOPPED_FOREVER, THREAD_KILLED }
 
enum  rb_vm_defineclass_type_t { VM_DEFINECLASS_TYPE_CLASS = 0x00, VM_DEFINECLASS_TYPE_SINGLETON_CLASS = 0x01, VM_DEFINECLASS_TYPE_MODULE = 0x02, VM_DEFINECLASS_TYPE_MASK = 0x07 }
 
enum  vm_check_match_type { VM_CHECKMATCH_TYPE_WHEN = 1, VM_CHECKMATCH_TYPE_CASE = 2, VM_CHECKMATCH_TYPE_RESCUE = 3 }
 
enum  vm_special_object_type { VM_SPECIAL_OBJECT_VMCORE = 1, VM_SPECIAL_OBJECT_CBASE, VM_SPECIAL_OBJECT_CONST_BASE }
 
enum  vm_svar_index { VM_SVAR_LASTLINE = 0, VM_SVAR_BACKREF = 1, VM_SVAR_EXTRA_START = 2, VM_SVAR_FLIPFLOP_START = 2 }
 
enum  {
  VM_FRAME_MAGIC_METHOD = 0x11110001, VM_FRAME_MAGIC_BLOCK = 0x22220001, VM_FRAME_MAGIC_CLASS = 0x33330001, VM_FRAME_MAGIC_TOP = 0x44440001,
  VM_FRAME_MAGIC_CFUNC = 0x55550001, VM_FRAME_MAGIC_PROC = 0x66660001, VM_FRAME_MAGIC_IFUNC = 0x77770001, VM_FRAME_MAGIC_EVAL = 0x88880001,
  VM_FRAME_MAGIC_LAMBDA = 0x99990001, VM_FRAME_MAGIC_RESCUE = 0xaaaa0001, VM_FRAME_MAGIC_DUMMY = 0xbbbb0001, VM_FRAME_MAGIC_MASK = 0xffff0001,
  VM_FRAME_FLAG_PASSED = 0x0010, VM_FRAME_FLAG_FINISH = 0x0020, VM_FRAME_FLAG_BMETHOD = 0x0040, VM_FRAME_FLAG_CFRAME = 0x0080,
  VM_ENV_FLAG_LOCAL = 0x0002, VM_ENV_FLAG_ESCAPED = 0x0004, VM_ENV_FLAG_WB_REQUIRED = 0x0008
}
 
enum  { TIMER_INTERRUPT_MASK = 0x01, PENDING_INTERRUPT_MASK = 0x02, POSTPONED_JOB_INTERRUPT_MASK = 0x04, TRAP_INTERRUPT_MASK = 0x08 }
 

Functions

static const rb_iseq_trb_iseq_check (const rb_iseq_t *iseq)
 
struct rb_objspacerb_objspace_alloc (void)
 
void rb_objspace_free (struct rb_objspace *)
 
RUBY_SYMBOL_EXPORT_BEGIN rb_iseq_trb_iseq_new (NODE *, VALUE, VALUE, VALUE, const rb_iseq_t *parent, enum iseq_type)
 
rb_iseq_trb_iseq_new_top (NODE *node, VALUE name, VALUE path, VALUE absolute_path, const rb_iseq_t *parent)
 
rb_iseq_trb_iseq_new_main (NODE *node, VALUE path, VALUE absolute_path, const rb_iseq_t *parent)
 
rb_iseq_trb_iseq_new_with_bopt (NODE *, VALUE, VALUE, VALUE, VALUE, VALUE, enum iseq_type, VALUE)
 
rb_iseq_trb_iseq_new_with_opt (NODE *, VALUE, VALUE, VALUE, VALUE, const rb_iseq_t *parent, enum iseq_type, const rb_compile_option_t *)
 
rb_iseq_trb_iseq_compile (VALUE src, VALUE file, VALUE line)
 
rb_iseq_trb_iseq_compile_on_base (VALUE src, VALUE file, VALUE line, const struct rb_block *base_block)
 
rb_iseq_trb_iseq_compile_with_option (VALUE src, VALUE file, VALUE absolute_path, VALUE line, const struct rb_block *base_block, VALUE opt)
 
VALUE rb_iseq_disasm (const rb_iseq_t *iseq)
 
int rb_iseq_disasm_insn (VALUE str, const VALUE *iseqval, size_t pos, const rb_iseq_t *iseq, VALUE child)
 Disassemble a instruction Iseq -> Iseq inspect object. More...
 
const char * ruby_node_name (int node)
 
VALUE rb_iseq_coverage (const rb_iseq_t *iseq)
 
void rb_vm_change_state (void)
 
static void VM_FORCE_WRITE_SPECIAL_CONST (const VALUE *ptr, VALUE special_const_value)
 
static void VM_ENV_FLAGS_SET (const VALUE *ep, VALUE flag)
 
static void VM_ENV_FLAGS_UNSET (const VALUE *ep, VALUE flag)
 
static unsigned long VM_ENV_FLAGS (const VALUE *ep, long flag)
 
static unsigned long VM_FRAME_TYPE (const rb_control_frame_t *cfp)
 
static int VM_FRAME_FINISHED_P (const rb_control_frame_t *cfp)
 
static int VM_FRAME_BMETHOD_P (const rb_control_frame_t *cfp)
 
static int rb_obj_is_iseq (VALUE iseq)
 
static int VM_FRAME_CFRAME_P (const rb_control_frame_t *cfp)
 
static int VM_FRAME_RUBYFRAME_P (const rb_control_frame_t *cfp)
 
static int VM_ENV_LOCAL_P (const VALUE *ep)
 
static const VALUEVM_ENV_PREV_EP (const VALUE *ep)
 
static VALUE VM_ENV_BLOCK_HANDLER (const VALUE *ep)
 
static int VM_ENV_ESCAPED_P (const VALUE *ep)
 
static VALUE VM_ENV_ENVVAL (const VALUE *ep)
 
static const rb_env_tVM_ENV_ENVVAL_PTR (const VALUE *ep)
 
static VALUE VM_ENV_PROCVAL (const VALUE *ep)
 
static const rb_env_tvm_env_new (VALUE *env_ep, VALUE *env_body, unsigned int env_size, const rb_iseq_t *iseq)
 
static void VM_FORCE_WRITE (const VALUE *ptr, VALUE v)
 
static void VM_STACK_ENV_WRITE (const VALUE *ep, int index, VALUE v)
 
const VALUErb_vm_ep_local_ep (const VALUE *ep)
 
const VALUErb_vm_proc_local_ep (VALUE proc)
 
VALUE rb_vm_frame_block_handler (const rb_control_frame_t *cfp)
 
static int VM_BH_ISEQ_BLOCK_P (VALUE block_handler)
 
static VALUE VM_BH_FROM_ISEQ_BLOCK (const struct rb_captured_block *captured)
 
static const struct rb_captured_blockVM_BH_TO_ISEQ_BLOCK (VALUE block_handler)
 
static int VM_BH_IFUNC_P (VALUE block_handler)
 
static VALUE VM_BH_FROM_IFUNC_BLOCK (const struct rb_captured_block *captured)
 
static const struct rb_captured_blockVM_BH_TO_IFUNC_BLOCK (VALUE block_handler)
 
static const struct rb_captured_blockVM_BH_TO_CAPT_BLOCK (VALUE block_handler)
 
static enum rb_block_handler_type vm_block_handler_type (VALUE block_handler)
 
static int vm_block_handler_verify (VALUE block_handler)
 
static enum rb_block_type vm_block_type (const struct rb_block *block)
 
static void vm_block_type_set (const struct rb_block *block, enum rb_block_type type)
 
static const struct rb_blockvm_proc_block (VALUE procval)
 
static const rb_iseq_tvm_block_iseq (const struct rb_block *block)
 
static const VALUEvm_block_ep (const struct rb_block *block)
 
static const rb_iseq_tvm_proc_iseq (VALUE procval)
 
static const VALUEvm_proc_ep (VALUE procval)
 
static VALUE vm_block_self (const struct rb_block *block)
 
static VALUE VM_BH_TO_SYMBOL (VALUE block_handler)
 
static VALUE VM_BH_FROM_SYMBOL (VALUE symbol)
 
static VALUE VM_BH_TO_PROC (VALUE block_handler)
 
static VALUE VM_BH_FROM_PROC (VALUE procval)
 
VALUE rb_thread_alloc (VALUE klass)
 
VALUE rb_proc_alloc (VALUE klass)
 
VALUE rb_binding_alloc (VALUE klass)
 
void rb_vmdebug_stack_dump_raw (rb_thread_t *, rb_control_frame_t *)
 
void rb_vmdebug_debug_print_pre (rb_thread_t *th, rb_control_frame_t *cfp, const VALUE *_pc)
 
void rb_vmdebug_debug_print_post (rb_thread_t *th, rb_control_frame_t *cfp)
 
void rb_vm_bugreport (const void *)
 
 NORETURN (void rb_bug_context(const void *, const char *fmt,...))
 
RUBY_SYMBOL_EXPORT_BEGIN VALUE rb_iseq_eval (const rb_iseq_t *iseq)
 
VALUE rb_iseq_eval_main (const rb_iseq_t *iseq)
 
RUBY_SYMBOL_EXPORT_END int rb_thread_method_id_and_class (rb_thread_t *th, ID *idp, ID *called_idp, VALUE *klassp)
 
VALUE rb_vm_invoke_proc (rb_thread_t *th, rb_proc_t *proc, int argc, const VALUE *argv, VALUE block_handler)
 
VALUE rb_vm_make_proc_lambda (rb_thread_t *th, const struct rb_captured_block *captured, VALUE klass, int8_t is_lambda)
 
VALUE rb_vm_make_proc (rb_thread_t *th, const struct rb_captured_block *captured, VALUE klass)
 
VALUE rb_vm_make_binding (rb_thread_t *th, const rb_control_frame_t *src_cfp)
 
VALUE rb_vm_env_local_variables (const rb_env_t *env)
 
const rb_env_trb_vm_env_prev_env (const rb_env_t *env)
 
const VALUErb_binding_add_dynavars (rb_binding_t *bind, int dyncount, const ID *dynvars)
 
void rb_vm_inc_const_missing_count (void)
 
void rb_vm_gvl_destroy (rb_vm_t *vm)
 
VALUE rb_vm_call (rb_thread_t *th, VALUE recv, VALUE id, int argc, const VALUE *argv, const rb_callable_method_entry_t *me)
 
void rb_vm_pop_frame (rb_thread_t *th)
 
void rb_thread_start_timer_thread (void)
 
void rb_thread_stop_timer_thread (void)
 
void rb_thread_reset_timer_thread (void)
 
void rb_thread_wakeup_timer_thread (void)
 
static void rb_vm_living_threads_init (rb_vm_t *vm)
 
static void rb_vm_living_threads_insert (rb_vm_t *vm, rb_thread_t *th)
 
static void rb_vm_living_threads_remove (rb_vm_t *vm, rb_thread_t *th)
 
rb_control_frame_trb_vm_get_ruby_level_next_cfp (const rb_thread_t *th, const rb_control_frame_t *cfp)
 
rb_control_frame_trb_vm_get_binding_creatable_next_cfp (const rb_thread_t *th, const rb_control_frame_t *cfp)
 
int rb_vm_get_sourceline (const rb_control_frame_t *)
 
VALUE rb_name_err_mesg_new (VALUE mesg, VALUE recv, VALUE method)
 
void rb_vm_stack_to_heap (rb_thread_t *th)
 
void ruby_thread_init_stack (rb_thread_t *th)
 
int rb_vm_control_frame_id_and_class (const rb_control_frame_t *cfp, ID *idp, ID *called_idp, VALUE *klassp)
 
void rb_vm_rewind_cfp (rb_thread_t *th, rb_control_frame_t *cfp)
 
void rb_vm_register_special_exception (enum ruby_special_exceptions sp, VALUE exception_class, const char *mesg)
 
void rb_gc_mark_machine_stack (rb_thread_t *th)
 
int rb_autoloading_value (VALUE mod, ID id, VALUE *value)
 
void rb_vm_rewrite_cref (rb_cref_t *node, VALUE old_klass, VALUE new_klass, rb_cref_t **new_cref_ptr)
 
const rb_callable_method_entry_trb_vm_frame_method_entry (const rb_control_frame_t *cfp)
 
VALUE rb_exc_set_backtrace (VALUE exc, VALUE bt)
 
int rb_signal_buff_size (void)
 
void rb_signal_exec (rb_thread_t *th, int sig)
 
void rb_threadptr_check_signal (rb_thread_t *mth)
 
void rb_threadptr_signal_raise (rb_thread_t *th, int sig)
 
void rb_threadptr_signal_exit (rb_thread_t *th)
 
void rb_threadptr_execute_interrupts (rb_thread_t *, int)
 
void rb_threadptr_interrupt (rb_thread_t *th)
 
void rb_threadptr_unlock_all_locking_mutexes (rb_thread_t *th)
 
void rb_threadptr_pending_interrupt_clear (rb_thread_t *th)
 
void rb_threadptr_pending_interrupt_enque (rb_thread_t *th, VALUE v)
 
int rb_threadptr_pending_interrupt_active_p (rb_thread_t *th)
 
void rb_threadptr_error_print (rb_thread_t *volatile th, volatile VALUE errinfo)
 
static void ruby_vm_check_ints (rb_thread_t *th)
 
void rb_threadptr_exec_event_hooks (struct rb_trace_arg_struct *trace_arg)
 
void rb_threadptr_exec_event_hooks_and_pop_frame (struct rb_trace_arg_struct *trace_arg)
 
static void ruby_exec_event_hook_orig (rb_thread_t *const th, const rb_event_flag_t flag, VALUE self, ID id, ID called_id, VALUE klass, VALUE data, int pop_p)
 
RUBY_SYMBOL_EXPORT_BEGIN int rb_thread_check_trap_pending (void)
 
VALUE rb_get_coverages (void)
 
void rb_set_coverages (VALUE)
 
void rb_reset_coverages (void)
 
void rb_postponed_job_flush (rb_vm_t *vm)
 

Variables

const rb_data_type_t ruby_threadptr_data_type
 
RUBY_EXTERN VALUE rb_cISeq
 
RUBY_EXTERN VALUE rb_cRubyVM
 
RUBY_EXTERN VALUE rb_mRubyVMFrozenCore
 
const rb_data_type_t ruby_binding_data_type
 
rb_thread_truby_current_thread
 
rb_vm_truby_current_vm
 
rb_event_flag_t ruby_vm_event_flags
 

Macro Definition Documentation

◆ ARRAY_REDEFINED_OP_FLAG

#define ARRAY_REDEFINED_OP_FLAG   (1 << 3)

Definition at line 578 of file vm_core.h.

Referenced by vm_redefinition_check_flag().

◆ BASIC_OP_UNREDEFINED_P

#define BASIC_OP_UNREDEFINED_P (   op,
  klass 
)    (LIKELY((GET_VM()->redefined_flag[(op)]&(klass)) == 0))

Definition at line 588 of file vm_core.h.

Referenced by opt_eq_func().

◆ CHECK_VM_STACK_OVERFLOW

#define CHECK_VM_STACK_OVERFLOW (   cfp,
  margin 
)    WHEN_VM_STACK_OVERFLOWED(cfp, (cfp)->sp, margin) vm_stackoverflow()

◆ CHECK_VM_STACK_OVERFLOW0

#define CHECK_VM_STACK_OVERFLOW0 (   cfp,
  sp,
  margin 
)    WHEN_VM_STACK_OVERFLOWED(cfp, sp, margin) vm_stackoverflow()

Definition at line 1495 of file vm_core.h.

Referenced by vm_push_frame().

◆ CoreDataFromValue

#define CoreDataFromValue (   obj,
  type 
)    (type*)DATA_PTR(obj)

Definition at line 258 of file vm_core.h.

◆ ENABLE_VM_OBJSPACE

#define ENABLE_VM_OBJSPACE   1

Definition at line 87 of file vm_core.h.

◆ EXEC_EVENT_HOOK

#define EXEC_EVENT_HOOK (   th_,
  flag_,
  self_,
  id_,
  called_id_,
  klass_,
  data_ 
)    EXEC_EVENT_HOOK_ORIG(th_, flag_, self_, id_, called_id_, klass_, data_, 0)

◆ EXEC_EVENT_HOOK_AND_POP_FRAME

#define EXEC_EVENT_HOOK_AND_POP_FRAME (   th_,
  flag_,
  self_,
  id_,
  called_id_,
  klass_,
  data_ 
)    EXEC_EVENT_HOOK_ORIG(th_, flag_, self_, id_, called_id_, klass_, data_, 1)

Definition at line 1631 of file vm_core.h.

Referenced by hook_before_rewind().

◆ EXEC_EVENT_HOOK_ORIG

#define EXEC_EVENT_HOOK_ORIG (   th_,
  flag_,
  self_,
  id_,
  called_id_,
  klass_,
  data_,
  pop_p_ 
)
Value:
do { \
const rb_event_flag_t flag_arg_ = (flag_); \
if (UNLIKELY(ruby_vm_event_flags & (flag_arg_))) { \
/* defer evaluating the other arguments */ \
ruby_exec_event_hook_orig(th_, flag_arg_, self_, id_, called_id_, klass_, data_, pop_p_); \
} \
} while (0)
rb_event_flag_t ruby_vm_event_flags
Definition: vm.c:318
#define UNLIKELY(x)
Definition: ffi_common.h:126
uint32_t rb_event_flag_t
Definition: ruby.h:2095

Definition at line 1599 of file vm_core.h.

◆ FALSE_REDEFINED_OP_FLAG

#define FALSE_REDEFINED_OP_FLAG   (1 << 11)

Definition at line 586 of file vm_core.h.

Referenced by vm_redefinition_check_flag().

◆ FLOAT_REDEFINED_OP_FLAG

#define FLOAT_REDEFINED_OP_FLAG   (1 << 1)

Definition at line 576 of file vm_core.h.

Referenced by opt_eq_func(), and vm_redefinition_check_flag().

◆ FUNC_FASTCALL

#define FUNC_FASTCALL (   x)    x

Definition at line 938 of file vm_core.h.

Referenced by define_aref_method(), and define_aset_method().

◆ GC_GUARDED_PTR

#define GC_GUARDED_PTR (   p)    VM_TAGGED_PTR_SET((p), 0x01)

Definition at line 947 of file vm_core.h.

Referenced by collect_caller_bindings_cfunc(), and collect_caller_bindings_iseq().

◆ GC_GUARDED_PTR_P

#define GC_GUARDED_PTR_P (   p)    (((VALUE)(p)) & 0x01)

Definition at line 949 of file vm_core.h.

◆ GC_GUARDED_PTR_REF

#define GC_GUARDED_PTR_REF (   p)    VM_TAGGED_PTR_REF((p), 0x03)

Definition at line 948 of file vm_core.h.

Referenced by collect_caller_bindings(), rb_vmdebug_stack_dump_raw(), and VM_ENV_PREV_EP().

◆ GET_THREAD

#define GET_THREAD ( )    vm_thread_with_frame(ruby_current_thread)

Definition at line 1513 of file vm_core.h.

Referenced by args_setup_kw_parameters(), call_trace_func(), call_without_gvl(), caller_location(), check_match(), cont_capture(), cont_free(), cont_new(), cont_restore_thread(), debug_deadlock_check(), do_select(), errinfo_getter(), error_handle(), eval_string_with_cref(), eval_under(), fiber_current(), fiber_init(), fiber_switch(), fiber_t_alloc(), gc_mark_roots(), gc_page_sweep(), get_errinfo(), get_trace_arg(), Init_Cont(), Init_heap(), Init_signal(), Init_Thread(), Init_VM(), iseqw_s_compile_file(), location_to_str(), m_core_define_method(), m_core_define_singleton_method(), method_definition_set(), method_missing(), mod_using(), name_err_initialize(), obj_respond_to(), oldbt_init(), prev_frame_callee(), prev_frame_func(), proc_new(), rb_backtrace_print_as_bugreport(), rb_backtrace_print_to(), rb_binding_add_dynavars(), rb_binding_new(), rb_block_arity(), rb_block_given_p(), rb_block_min_max_arity(), rb_bug(), rb_bug_context(), rb_call(), rb_call0(), rb_call_super(), rb_catch_obj(), rb_catch_protect(), rb_check_deadlock(), rb_check_funcall_default(), rb_check_funcall_with_hook(), rb_cont_call(), rb_current_realfilepath(), rb_current_receiver(), rb_debug_inspector_open(), rb_ensure(), rb_errinfo(), rb_eval_cmd(), rb_eval_string_wrap(), rb_exec_end_proc(), rb_exit(), rb_f_abort(), rb_f_block_given_p(), rb_f_caller(), rb_f_caller_locations(), rb_f_kill(), rb_f_local_variables(), rb_fiber_start(), rb_frame_callee(), rb_frame_last_func(), rb_frame_method_id_and_class(), rb_frame_this_func(), rb_funcall_with_block(), rb_gc_register_mark_object(), rb_get_backtrace(), rb_iseq_compile_with_option(), rb_iseq_eval(), rb_iseq_eval_main(), rb_iter_break(), rb_iter_break_value(), rb_iterate(), rb_lambda_call(), rb_last_status_clear(), rb_last_status_get(), rb_last_status_set(), rb_load_internal(), rb_load_protect(), rb_longjmp(), rb_make_backtrace(), rb_memerror(), rb_method_call_with_block(), rb_method_missing(), rb_mod_define_method(), rb_mod_refine(), rb_mutex_lock(), rb_mutex_owned_p(), rb_mutex_trylock(), rb_mutex_unlock(), rb_mutex_wait_for(), rb_notify_fd_close(), rb_obj_respond_to(), rb_postponed_job_flush(), rb_postponed_job_register(), rb_postponed_job_register_one(), rb_proc_call(), rb_proc_call_with_block(), rb_proc_create(), rb_proc_create_from_captured(), rb_profile_frames(), rb_protect(), rb_raise_jump(), rb_require_internal(), rb_rescue2(), rb_safe_level(), rb_scope_module_func_check(), rb_scope_visibility_get(), rb_set_end_proc(), rb_set_errinfo(), rb_set_safe_level(), rb_set_safe_level_force(), rb_source_location(), rb_sourcefile(), rb_sourcefilename(), rb_sourceline(), rb_suppress_tracing(), rb_thread_check_ints(), rb_thread_current(), rb_thread_exit(), rb_thread_fd_select(), rb_thread_io_blocking_region(), rb_thread_kill(), rb_thread_list(), rb_thread_main(), rb_thread_mark(), rb_thread_s_abort_exc(), rb_thread_s_abort_exc_set(), rb_thread_s_handle_interrupt(), rb_thread_s_pending_interrupt_p(), rb_thread_s_report_exc(), rb_thread_s_report_exc_set(), rb_thread_schedule(), rb_thread_schedule_limits(), rb_thread_shield_wait(), rb_thread_sleep_deadly(), rb_thread_sleep_deadly_allow_spurious_wakeup(), rb_thread_sleep_forever(), rb_thread_start_timer_thread(), rb_thread_terminate_all(), rb_thread_wait_for(), rb_threadptr_raise(), rb_throw_obj(), rb_uninterruptible(), rb_vm_backtrace_object(), rb_vm_call_cfunc(), rb_vm_cbase(), rb_vm_cref(), rb_vm_cref_in_context(), rb_vm_cref_new_toplevel(), rb_vm_cref_replace_with_duplicated_cref(), rb_vm_frame_block_handler(), rb_vm_fstring_table(), rb_vm_make_jump_tag_but_local_jump(), rb_vm_pop_cfunc_frame(), rb_vmdebug_stack_dump_raw_current(), rb_waitpid(), rb_yield_0(), rb_yield_block(), rb_yield_lambda(), rb_yield_refine_block(), recursive_list_access(), refine_sym_proc_call(), return_fiber(), ruby_cleanup(), ruby_error_print(), ruby_exec_internal(), ruby_finalize_1(), ruby_init(), ruby_kill(), ruby_options(), ruby_stack_length(), ruby_th_dtrace_setup(), ruby_thread_init(), run_finalizer(), safe_setter(), send_internal(), signal_exec(), stack_check(), thgroup_list(), thread_create_core(), thread_join(), thread_raise_m(), top_define_method(), top_include(), top_using(), tracepoint_inspect(), update_coverage(), vm_backtrace_print(), vm_base_ptr(), VM_CAPTURED_BLOCK_TO_CFP(), VM_CFP_TO_CAPTURED_BLOCK(), vm_make_proc_with_iseq(), vm_svar_get(), vm_svar_set(), and yield_under().

◆ GET_VM

#define GET_VM ( )    ruby_current_vm

◆ GetBindingPtr

#define GetBindingPtr (   obj,
  ptr 
)    GetCoreDataFromValue((obj), rb_binding_t, (ptr))

◆ GetCoreDataFromValue

#define GetCoreDataFromValue (   obj,
  type,
  ptr 
)    ((ptr) = CoreDataFromValue((obj), type))

◆ GetProcPtr

#define GetProcPtr (   obj,
  ptr 
)    GetCoreDataFromValue((obj), rb_proc_t, (ptr))

◆ GetThreadPtr

#define GetThreadPtr (   obj,
  ptr 
)    TypedData_Get_Struct((obj), rb_thread_t, &ruby_threadptr_data_type, (ptr))

◆ GetVMPtr

#define GetVMPtr (   obj,
  ptr 
)    GetCoreDataFromValue((obj), rb_vm_t, (ptr))

Definition at line 463 of file vm_core.h.

◆ HASH_REDEFINED_OP_FLAG

#define HASH_REDEFINED_OP_FLAG   (1 << 4)

Definition at line 579 of file vm_core.h.

Referenced by vm_redefinition_check_flag().

◆ INTEGER_REDEFINED_OP_FLAG

#define INTEGER_REDEFINED_OP_FLAG   (1 << 0)

Definition at line 575 of file vm_core.h.

Referenced by opt_eq_func(), and vm_redefinition_check_flag().

◆ NIL_REDEFINED_OP_FLAG

#define NIL_REDEFINED_OP_FLAG   (1 << 9)

Definition at line 584 of file vm_core.h.

Referenced by vm_redefinition_check_flag().

◆ NSIG

#define NSIG   (_SIGMAX + 1) /* For QNX */

Definition at line 95 of file vm_core.h.

Referenced by esignal_init(), rb_exec_async_signal_safe(), and trap_signm().

◆ OPT_CALL_CFUNC_WITHOUT_FRAME

#define OPT_CALL_CFUNC_WITHOUT_FRAME   0

Definition at line 1510 of file vm_core.h.

◆ rb_thread_set_current

#define rb_thread_set_current (   th)
Value:
do { \
if ((th)->vm->running_thread != (th)) { \
(th)->running_time_us = 0; \
} \
rb_thread_set_current_raw(th); \
(th)->vm->running_thread = (th); \
} while (0)

Definition at line 1529 of file vm_core.h.

Referenced by blocking_region_end(), Init_VM(), rb_thread_schedule_limits(), and thread_start_func_2().

◆ rb_thread_set_current_raw

#define rb_thread_set_current_raw (   th)    (void)(ruby_current_thread = (th))

Definition at line 1528 of file vm_core.h.

Referenced by Init_BareVM().

◆ REGEXP_REDEFINED_OP_FLAG

#define REGEXP_REDEFINED_OP_FLAG   (1 << 8)

Definition at line 583 of file vm_core.h.

Referenced by vm_redefinition_check_flag().

◆ RUBY_CONST_ASSERT

#define RUBY_CONST_ASSERT (   expr)    (1/!!(expr)) /* expr must be a compile-time constant */

Definition at line 1488 of file vm_core.h.

◆ RUBY_NSIG

#define RUBY_NSIG   NSIG

Definition at line 98 of file vm_core.h.

Referenced by rb_get_next_signal(), and rb_vm_mark().

◆ RUBY_VM_CHECK_INTS

#define RUBY_VM_CHECK_INTS (   th)    ruby_vm_check_ints(th)

◆ RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P

#define RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P (   th,
  cfp 
)    (!RUBY_VM_VALID_CONTROL_FRAME_P((cfp), RUBY_VM_END_CONTROL_FRAME(th)))

◆ RUBY_VM_END_CONTROL_FRAME

#define RUBY_VM_END_CONTROL_FRAME (   th)    ((rb_control_frame_t *)((th)->stack + (th)->stack_size))

◆ RUBY_VM_FIBER_MACHINE_STACK_SIZE

#define RUBY_VM_FIBER_MACHINE_STACK_SIZE   ( 64 * 1024 * sizeof(VALUE)) /* 256 KB or 512 KB */

Definition at line 571 of file vm_core.h.

Referenced by vm_default_params_setup().

◆ RUBY_VM_FIBER_MACHINE_STACK_SIZE_MIN

#define RUBY_VM_FIBER_MACHINE_STACK_SIZE_MIN   ( 16 * 1024 * sizeof(VALUE)) /* 64 KB or 128 KB */

Definition at line 572 of file vm_core.h.

Referenced by vm_default_params_setup().

◆ RUBY_VM_FIBER_VM_STACK_SIZE

#define RUBY_VM_FIBER_VM_STACK_SIZE   ( 16 * 1024 * sizeof(VALUE)) /* 64 KB or 128 KB */

Definition at line 569 of file vm_core.h.

Referenced by vm_default_params_setup().

◆ RUBY_VM_FIBER_VM_STACK_SIZE_MIN

#define RUBY_VM_FIBER_VM_STACK_SIZE_MIN   ( 2 * 1024 * sizeof(VALUE)) /* 8 KB or 16 KB */

Definition at line 570 of file vm_core.h.

Referenced by vm_default_params_setup().

◆ RUBY_VM_INTERRUPTED

#define RUBY_VM_INTERRUPTED (   th)    ((th)->interrupt_flag & ~(th)->interrupt_mask & (PENDING_INTERRUPT_MASK|TRAP_INTERRUPT_MASK))

Definition at line 1552 of file vm_core.h.

Referenced by lock_func(), rb_check_deadlock(), and rb_thread_interrupted().

◆ RUBY_VM_INTERRUPTED_ANY

#define RUBY_VM_INTERRUPTED_ANY (   th)    ((th)->interrupt_flag & ~(th)->interrupt_mask)

Definition at line 1553 of file vm_core.h.

Referenced by ruby_vm_check_ints(), set_unblock_function(), and vm_check_ints_blocking().

◆ RUBY_VM_NEXT_CONTROL_FRAME

#define RUBY_VM_NEXT_CONTROL_FRAME (   cfp)    ((cfp)-1)

Definition at line 1173 of file vm_core.h.

Referenced by backtrace_each().

◆ RUBY_VM_PREVIOUS_CONTROL_FRAME

#define RUBY_VM_PREVIOUS_CONTROL_FRAME (   cfp)    ((cfp)+1)

◆ RUBY_VM_SET_INTERRUPT

#define RUBY_VM_SET_INTERRUPT (   th)    ATOMIC_OR((th)->interrupt_flag, PENDING_INTERRUPT_MASK)

◆ RUBY_VM_SET_POSTPONED_JOB_INTERRUPT

#define RUBY_VM_SET_POSTPONED_JOB_INTERRUPT (   th)    ATOMIC_OR((th)->interrupt_flag, POSTPONED_JOB_INTERRUPT_MASK)

Definition at line 1550 of file vm_core.h.

Referenced by postponed_job_register(), and rb_postponed_job_register_one().

◆ RUBY_VM_SET_TIMER_INTERRUPT

#define RUBY_VM_SET_TIMER_INTERRUPT (   th)    ATOMIC_OR((th)->interrupt_flag, TIMER_INTERRUPT_MASK)

Definition at line 1548 of file vm_core.h.

Referenced by timer_thread_function().

◆ RUBY_VM_SET_TRAP_INTERRUPT

#define RUBY_VM_SET_TRAP_INTERRUPT (   th)    ATOMIC_OR((th)->interrupt_flag, TRAP_INTERRUPT_MASK)

Definition at line 1551 of file vm_core.h.

Referenced by rb_threadptr_interrupt_common().

◆ RUBY_VM_SIZE_ALIGN

#define RUBY_VM_SIZE_ALIGN   4096

Definition at line 562 of file vm_core.h.

Referenced by get_param().

◆ RUBY_VM_THREAD_MACHINE_STACK_SIZE

#define RUBY_VM_THREAD_MACHINE_STACK_SIZE   ( 128 * 1024 * sizeof(VALUE)) /* 512 KB or 1024 KB */

Definition at line 566 of file vm_core.h.

Referenced by vm_default_params_setup().

◆ RUBY_VM_THREAD_MACHINE_STACK_SIZE_MIN

#define RUBY_VM_THREAD_MACHINE_STACK_SIZE_MIN   ( 16 * 1024 * sizeof(VALUE)) /* 64 KB or 128 KB */

Definition at line 567 of file vm_core.h.

Referenced by vm_default_params_setup().

◆ RUBY_VM_THREAD_MODEL

#define RUBY_VM_THREAD_MODEL   2

Definition at line 58 of file vm_core.h.

◆ RUBY_VM_THREAD_VM_STACK_SIZE

#define RUBY_VM_THREAD_VM_STACK_SIZE   ( 128 * 1024 * sizeof(VALUE)) /* 512 KB or 1024 KB */

Definition at line 564 of file vm_core.h.

Referenced by vm_default_params_setup().

◆ RUBY_VM_THREAD_VM_STACK_SIZE_MIN

#define RUBY_VM_THREAD_VM_STACK_SIZE_MIN   ( 2 * 1024 * sizeof(VALUE)) /* 8 KB or 16 KB */

Definition at line 565 of file vm_core.h.

Referenced by vm_default_params_setup().

◆ RUBY_VM_VALID_CONTROL_FRAME_P

#define RUBY_VM_VALID_CONTROL_FRAME_P (   cfp,
  ecfp 
)    ((void *)(ecfp) > (void *)(cfp))

Definition at line 1176 of file vm_core.h.

Referenced by errinfo_place().

◆ RUBYVM_CFUNC_FRAME_P

#define RUBYVM_CFUNC_FRAME_P (   cfp)    (VM_FRAME_TYPE(cfp) == VM_FRAME_MAGIC_CFUNC)

Definition at line 1066 of file vm_core.h.

Referenced by backtrace_each().

◆ SDR

#define SDR ( )    rb_vmdebug_stack_dump_raw(GET_THREAD(), GET_THREAD()->cfp)

Definition at line 1414 of file vm_core.h.

Referenced by rb_iterate0(), rb_vm_bugreport(), vm_pop_frame(), and vm_push_frame().

◆ SDR2

#define SDR2 (   cfp)    rb_vmdebug_stack_dump_raw(GET_THREAD(), (cfp))

Definition at line 1415 of file vm_core.h.

Referenced by rb_vmdebug_debug_print_post().

◆ STRING_REDEFINED_OP_FLAG

#define STRING_REDEFINED_OP_FLAG   (1 << 2)

Definition at line 577 of file vm_core.h.

Referenced by opt_eq_func(), and vm_redefinition_check_flag().

◆ SYMBOL_REDEFINED_OP_FLAG

#define SYMBOL_REDEFINED_OP_FLAG   (1 << 6)

Definition at line 581 of file vm_core.h.

Referenced by vm_redefinition_check_flag().

◆ sysstack_error

#define sysstack_error   GET_VM()->special_exceptions[ruby_error_sysstack]

◆ TAG_BREAK

#define TAG_BREAK   RUBY_TAG_BREAK

◆ TAG_FATAL

#define TAG_FATAL   RUBY_TAG_FATAL

◆ TAG_MASK

#define TAG_MASK   RUBY_TAG_MASK

Definition at line 171 of file vm_core.h.

Referenced by error_handle().

◆ TAG_NEXT

#define TAG_NEXT   RUBY_TAG_NEXT

◆ TAG_RAISE

#define TAG_RAISE   RUBY_TAG_RAISE

◆ TAG_REDO

#define TAG_REDO   RUBY_TAG_REDO

◆ TAG_RETRY

#define TAG_RETRY   RUBY_TAG_RETRY

◆ TAG_RETURN

#define TAG_RETURN   RUBY_TAG_RETURN

◆ TAG_THROW

#define TAG_THROW   RUBY_TAG_THROW

Definition at line 169 of file vm_core.h.

Referenced by error_handle(), rb_throw_obj(), vm_catch_protect(), and vm_throw_continue().

◆ TIME_REDEFINED_OP_FLAG

#define TIME_REDEFINED_OP_FLAG   (1 << 7)

Definition at line 582 of file vm_core.h.

Referenced by vm_redefinition_check_flag().

◆ TRUE_REDEFINED_OP_FLAG

#define TRUE_REDEFINED_OP_FLAG   (1 << 10)

Definition at line 585 of file vm_core.h.

Referenced by vm_redefinition_check_flag().

◆ USE_LAZY_LOAD

#define USE_LAZY_LOAD   0

Definition at line 408 of file vm_core.h.

◆ va_init_list

#define va_init_list (   a,
 
)    va_start((a))

Definition at line 105 of file vm_core.h.

◆ VM_ASSERT

#define VM_ASSERT (   expr)    ((void)0)

Definition at line 54 of file vm_core.h.

Referenced by aliased_callable_method_entry(), args_extend(), args_pop_keyword_hash(), args_reduce(), check_block_handler(), cont_restore_thread(), core_hash_merge(), env_clone(), gc_mark_imemo(), get_local_variable_ptr(), lep_svar(), lep_svar_write(), method_definition_set(), METHOD_ENTRY_BASIC_SET(), METHOD_ENTRY_FLAGS_SET(), METHOD_ENTRY_VISI_SET(), obj_free(), pass_passed_block_handler(), prepare_callable_method_entry(), rb_method_definition_release(), rb_method_entry_complement_defined_class(), rb_method_entry_make(), rb_proc_create(), rb_proc_create_from_captured(), rb_thread_mark(), rb_thread_recycle_stack_release(), rb_vm_frame_block_handler(), rb_vm_invoke_proc(), rb_vm_make_proc_lambda(), refined_method_callable_without_refinement(), setup_parameters_complex(), THROW_DATA_CONSUMED_P(), VM_BH_FROM_IFUNC_BLOCK(), VM_BH_FROM_ISEQ_BLOCK(), VM_BH_FROM_PROC(), VM_BH_FROM_SYMBOL(), VM_BH_IFUNC_P(), VM_BH_ISEQ_BLOCK_P(), VM_BH_TO_CAPT_BLOCK(), VM_BH_TO_IFUNC_BLOCK(), VM_BH_TO_ISEQ_BLOCK(), VM_BH_TO_PROC(), VM_BH_TO_SYMBOL(), vm_block_handler_type(), vm_block_handler_verify(), vm_block_type(), vm_call_method(), vm_call_method_each_type(), VM_CAPTURED_BLOCK_TO_CFP(), VM_CFP_TO_CAPTURED_BLOCK(), VM_ENV_BLOCK_HANDLER(), VM_ENV_ENVVAL(), VM_ENV_ESCAPED_P(), VM_ENV_FLAGS(), VM_ENV_FLAGS_SET(), VM_ENV_FLAGS_UNSET(), VM_ENV_PREV_EP(), VM_ENV_PROCVAL(), VM_FORCE_WRITE_SPECIAL_CONST(), VM_FRAME_CFRAME_P(), vm_make_env_each(), vm_passed_block_handler_set(), vm_proc_block(), vm_proc_iseq(), vm_push_frame(), vm_search_method(), VM_STACK_ENV_WRITE(), vm_stackoverflow(), and vm_throw_start().

◆ VM_BLOCK_HANDLER_NONE

#define VM_BLOCK_HANDLER_NONE   0

◆ VM_CALL_ARGS_BLOCKARG

#define VM_CALL_ARGS_BLOCKARG   (0x01 << 1) /* m(&block) */

◆ VM_CALL_ARGS_SIMPLE

#define VM_CALL_ARGS_SIMPLE   (0x01 << 4) /* (ci->flag & (SPLAT|BLOCKARG)) && blockiseq == NULL && ci->kw_arg == NULL */

◆ VM_CALL_ARGS_SPLAT

#define VM_CALL_ARGS_SPLAT   (0x01 << 0) /* m(*args) */

◆ VM_CALL_BLOCKISEQ

#define VM_CALL_BLOCKISEQ   (0x01 << 5) /* has blockiseq */

Definition at line 908 of file vm_core.h.

◆ VM_CALL_FCALL

#define VM_CALL_FCALL   (0x01 << 2) /* m(...) */

◆ VM_CALL_KWARG

#define VM_CALL_KWARG   (0x01 << 6) /* has kwarg */

◆ VM_CALL_OPT_SEND

#define VM_CALL_OPT_SEND   (0x01 << 9) /* internal flag */

◆ VM_CALL_SUPER

#define VM_CALL_SUPER   (0x01 << 8) /* super */

Definition at line 911 of file vm_core.h.

Referenced by ci_missing_reason(), iseq_compile_each(), and rb_insn_operand_intern().

◆ VM_CALL_TAILCALL

#define VM_CALL_TAILCALL   (0x01 << 7) /* located at tail position */

Definition at line 910 of file vm_core.h.

Referenced by iseq_peephole_optimize(), rb_insn_operand_intern(), and vm_call_iseq_setup_2().

◆ VM_CALL_VCALL

#define VM_CALL_VCALL   (0x01 << 3) /* m */

◆ VM_CHECK_MODE

#define VM_CHECK_MODE   0

Definition at line 20 of file vm_core.h.

Referenced by vm_pop_frame().

◆ VM_CHECKMATCH_ARRAY

#define VM_CHECKMATCH_ARRAY   0x04

Definition at line 901 of file vm_core.h.

Referenced by iseq_compile_each().

◆ VM_CHECKMATCH_TYPE_MASK

#define VM_CHECKMATCH_TYPE_MASK   0x03

Definition at line 900 of file vm_core.h.

◆ VM_DEBUG_BP_CHECK

#define VM_DEBUG_BP_CHECK   0

Definition at line 591 of file vm_core.h.

Referenced by VM_CAPTURED_BLOCK_TO_CFP().

◆ VM_DEBUG_VERIFY_METHOD_CACHE

#define VM_DEBUG_VERIFY_METHOD_CACHE   (VM_DEBUG_MODE != 0)

Definition at line 595 of file vm_core.h.

◆ VM_DEFINECLASS_FLAG_HAS_SUPERCLASS

#define VM_DEFINECLASS_FLAG_HAS_SUPERCLASS   0x10

Definition at line 832 of file vm_core.h.

Referenced by iseq_compile_each().

◆ VM_DEFINECLASS_FLAG_SCOPED

#define VM_DEFINECLASS_FLAG_SCOPED   0x08

Definition at line 831 of file vm_core.h.

Referenced by iseq_compile_each().

◆ VM_DEFINECLASS_HAS_SUPERCLASS_P

#define VM_DEFINECLASS_HAS_SUPERCLASS_P (   x)    ((x) & VM_DEFINECLASS_FLAG_HAS_SUPERCLASS)

Definition at line 834 of file vm_core.h.

◆ VM_DEFINECLASS_SCOPED_P

#define VM_DEFINECLASS_SCOPED_P (   x)    ((x) & VM_DEFINECLASS_FLAG_SCOPED)

Definition at line 833 of file vm_core.h.

◆ VM_DEFINECLASS_TYPE

#define VM_DEFINECLASS_TYPE (   x)    ((rb_vm_defineclass_type_t)(x) & VM_DEFINECLASS_TYPE_MASK)

Definition at line 830 of file vm_core.h.

◆ VM_ENV_DATA_INDEX_ENV

#define VM_ENV_DATA_INDEX_ENV   ( 1) /* ep[ 1] */

◆ VM_ENV_DATA_INDEX_ENV_PROC

#define VM_ENV_DATA_INDEX_ENV_PROC   ( 2) /* ep[ 2] */

Definition at line 994 of file vm_core.h.

Referenced by VM_ENV_PROCVAL().

◆ VM_ENV_DATA_INDEX_FLAGS

#define VM_ENV_DATA_INDEX_FLAGS   ( 0) /* ep[ 0] */

◆ VM_ENV_DATA_INDEX_ME_CREF

#define VM_ENV_DATA_INDEX_ME_CREF   (-2) /* ep[-2] */

◆ VM_ENV_DATA_INDEX_SPECVAL

#define VM_ENV_DATA_INDEX_SPECVAL   (-1) /* ep[-1] */

◆ VM_ENV_DATA_SIZE

#define VM_ENV_DATA_SIZE   ( 3)

◆ VM_ENV_INDEX_LAST_LVAR

#define VM_ENV_INDEX_LAST_LVAR   (-VM_ENV_DATA_SIZE)

Definition at line 996 of file vm_core.h.

Referenced by errinfo_place().

◆ VM_GUARDED_PREV_EP

#define VM_GUARDED_PREV_EP (   ep)    GC_GUARDED_PTR(ep)

◆ VM_STACK_OVERFLOWED_P

#define VM_STACK_OVERFLOWED_P (   cfp,
  sp,
  margin 
)
Value:
(!RUBY_CONST_ASSERT(sizeof(*(sp)) == sizeof(VALUE)) || \
!RUBY_CONST_ASSERT(sizeof(*(cfp)) == sizeof(rb_control_frame_t)) || \
((rb_control_frame_t *)((sp) + (margin)) + 1) >= (cfp))
unsigned long VALUE
Definition: ruby.h:85
#define RUBY_CONST_ASSERT(expr)
Definition: vm_core.h:1488

Definition at line 1489 of file vm_core.h.

◆ VM_TAGGED_PTR_REF

#define VM_TAGGED_PTR_REF (   v,
  mask 
)    ((void *)((v) & ~mask))

◆ VM_TAGGED_PTR_SET

#define VM_TAGGED_PTR_SET (   p,
  tag 
)    ((VALUE)(p) | (tag))

Definition at line 944 of file vm_core.h.

Referenced by VM_BH_FROM_IFUNC_BLOCK(), and VM_BH_FROM_ISEQ_BLOCK().

◆ vm_thread_with_frame

#define vm_thread_with_frame (   th)    (th)

Definition at line 1525 of file vm_core.h.

◆ VM_UNREACHABLE

#define VM_UNREACHABLE (   func)    ((void)0)

◆ VMDEBUG

#define VMDEBUG   0

VM Debug Level.

debug level: 0: no debug output 1: show instruction name 2: show stack frame when control stack frame is changed 3: show stack status 4: show register 5: 10: gc check

Definition at line 37 of file vm_core.h.

Referenced by vm_pop_frame(), and vm_push_frame().

◆ WHEN_VM_STACK_OVERFLOWED

#define WHEN_VM_STACK_OVERFLOWED (   cfp,
  sp,
  margin 
)    if (LIKELY(!VM_STACK_OVERFLOWED_P(cfp, sp, margin))) {(void)0;} else /* overflowed */

Definition at line 1493 of file vm_core.h.

Typedef Documentation

◆ CALL_CACHE

typedef struct rb_call_cache* CALL_CACHE

Definition at line 931 of file vm_core.h.

◆ CALL_INFO

typedef struct rb_call_info* CALL_INFO

Definition at line 930 of file vm_core.h.

◆ CDHASH

typedef VALUE CDHASH

Definition at line 935 of file vm_core.h.

◆ IC

typedef struct iseq_inline_cache_entry* IC

Definition at line 929 of file vm_core.h.

◆ rb_at_exit_list

◆ rb_backtrace_iter_func

typedef int rb_backtrace_iter_func(void *, VALUE, int, VALUE)

Definition at line 1466 of file vm_core.h.

◆ rb_compile_option_t

Definition at line 184 of file vm_core.h.

◆ rb_control_frame_t

◆ rb_ensure_entry_t

◆ rb_ensure_list_t

◆ rb_fiber_t

typedef struct rb_fiber_struct rb_fiber_t

Definition at line 698 of file vm_core.h.

◆ rb_hook_list_t

◆ rb_insn_func_t

Definition at line 942 of file vm_core.h.

◆ rb_iseq_location_t

◆ rb_jmpbuf_t

typedef RUBY_JMP_BUF rb_jmpbuf_t

Definition at line 656 of file vm_core.h.

◆ rb_num_t

typedef unsigned long rb_num_t

Definition at line 150 of file vm_core.h.

◆ rb_thread_id_string_t

typedef char rb_thread_id_string_t[sizeof(rb_nativethread_id_t) *2+3]

Definition at line 696 of file vm_core.h.

◆ rb_thread_list_t

◆ rb_thread_t

typedef struct rb_thread_struct rb_thread_t

◆ rb_vm_at_exit_func

typedef void rb_vm_at_exit_func(struct rb_vm_struct *)

Definition at line 467 of file vm_core.h.

◆ rb_vm_t

typedef struct rb_vm_struct rb_vm_t

◆ vm_call_handler

typedef VALUE(* vm_call_handler) (struct rb_thread_struct *th, struct rb_control_frame_struct *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc)

Definition at line 238 of file vm_core.h.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
VM_FRAME_MAGIC_METHOD 
VM_FRAME_MAGIC_BLOCK 
VM_FRAME_MAGIC_CLASS 
VM_FRAME_MAGIC_TOP 
VM_FRAME_MAGIC_CFUNC 
VM_FRAME_MAGIC_PROC 
VM_FRAME_MAGIC_IFUNC 
VM_FRAME_MAGIC_EVAL 
VM_FRAME_MAGIC_LAMBDA 
VM_FRAME_MAGIC_RESCUE 
VM_FRAME_MAGIC_DUMMY 
VM_FRAME_MAGIC_MASK 
VM_FRAME_FLAG_PASSED 
VM_FRAME_FLAG_FINISH 
VM_FRAME_FLAG_BMETHOD 
VM_FRAME_FLAG_CFRAME 
VM_ENV_FLAG_LOCAL 
VM_ENV_FLAG_ESCAPED 
VM_ENV_FLAG_WB_REQUIRED 

Definition at line 951 of file vm_core.h.

◆ anonymous enum

anonymous enum
Enumerator
TIMER_INTERRUPT_MASK 
PENDING_INTERRUPT_MASK 
POSTPONED_JOB_INTERRUPT_MASK 
TRAP_INTERRUPT_MASK 

Definition at line 1541 of file vm_core.h.

◆ method_missing_reason

Enumerator
MISSING_NOENTRY 
MISSING_PRIVATE 
MISSING_PROTECTED 
MISSING_FCALL 
MISSING_VCALL 
MISSING_SUPER 
MISSING_MISSING 
MISSING_NONE 

Definition at line 203 of file vm_core.h.

◆ rb_block_handler_type

Enumerator
block_handler_type_iseq 
block_handler_type_ifunc 
block_handler_type_symbol 
block_handler_type_proc 

Definition at line 608 of file vm_core.h.

◆ rb_block_type

Enumerator
block_type_iseq 
block_type_ifunc 
block_type_symbol 
block_type_proc 

Definition at line 615 of file vm_core.h.

◆ rb_thread_status

Enumerator
THREAD_RUNNABLE 
THREAD_STOPPED 
THREAD_STOPPED_FOREVER 
THREAD_KILLED 

Definition at line 649 of file vm_core.h.

◆ rb_vm_defineclass_type_t

Enumerator
VM_DEFINECLASS_TYPE_CLASS 
VM_DEFINECLASS_TYPE_SINGLETON_CLASS 
VM_DEFINECLASS_TYPE_MODULE 
VM_DEFINECLASS_TYPE_MASK 

Definition at line 822 of file vm_core.h.

◆ ruby_basic_operators

Enumerator
BOP_PLUS 
BOP_MINUS 
BOP_MULT 
BOP_DIV 
BOP_MOD 
BOP_EQ 
BOP_EQQ 
BOP_LT 
BOP_LE 
BOP_LTLT 
BOP_AREF 
BOP_ASET 
BOP_LENGTH 
BOP_SIZE 
BOP_EMPTY_P 
BOP_SUCC 
BOP_GT 
BOP_GE 
BOP_NOT 
BOP_NEQ 
BOP_MATCH 
BOP_FREEZE 
BOP_MAX 
BOP_MIN 
BOP_LAST_ 

Definition at line 434 of file vm_core.h.

◆ ruby_special_exceptions

Enumerator
ruby_error_reenter 
ruby_error_nomemory 
ruby_error_sysstack 
ruby_error_stream_closed 
ruby_special_error_count 

Definition at line 426 of file vm_core.h.

◆ ruby_tag_type

Enumerator
RUBY_TAG_RETURN 
RUBY_TAG_BREAK 
RUBY_TAG_NEXT 
RUBY_TAG_RETRY 
RUBY_TAG_REDO 
RUBY_TAG_RAISE 
RUBY_TAG_THROW 
RUBY_TAG_FATAL 
RUBY_TAG_MASK 

Definition at line 152 of file vm_core.h.

◆ ruby_vm_throw_flags

Enumerator
VM_THROW_NO_ESCAPE_FLAG 
VM_THROW_LEVEL_SHIFT 
VM_THROW_STATE_MASK 

Definition at line 173 of file vm_core.h.

◆ vm_check_match_type

Enumerator
VM_CHECKMATCH_TYPE_WHEN 
VM_CHECKMATCH_TYPE_CASE 
VM_CHECKMATCH_TYPE_RESCUE 

Definition at line 894 of file vm_core.h.

◆ vm_special_object_type

Enumerator
VM_SPECIAL_OBJECT_VMCORE 
VM_SPECIAL_OBJECT_CBASE 
VM_SPECIAL_OBJECT_CONST_BASE 

Definition at line 914 of file vm_core.h.

◆ vm_svar_index

Enumerator
VM_SVAR_LASTLINE 
VM_SVAR_BACKREF 
VM_SVAR_EXTRA_START 
VM_SVAR_FLIPFLOP_START 

Definition at line 920 of file vm_core.h.

Function Documentation

◆ NORETURN()

NORETURN ( void   rb_bug_contextconst void *, const char *fmt,...)

◆ rb_autoloading_value()

int rb_autoloading_value ( VALUE  mod,
ID  id,
VALUE value 
)

◆ rb_binding_add_dynavars()

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

◆ rb_binding_alloc()

VALUE rb_binding_alloc ( VALUE  klass)

Definition at line 308 of file proc.c.

References TypedData_Make_Struct.

Referenced by binding_dup(), proc_binding(), rb_vm_make_binding(), and VM_BH_FROM_PROC().

◆ rb_exc_set_backtrace()

VALUE rb_exc_set_backtrace ( VALUE  exc,
VALUE  bt 
)

Definition at line 1044 of file error.c.

References exc_set_backtrace().

Referenced by raise_argument_error(), and set_backtrace().

◆ rb_gc_mark_machine_stack()

void rb_gc_mark_machine_stack ( rb_thread_t th)

Definition at line 4201 of file gc.c.

References GET_STACK_BOUNDS, mark_stack_locations(), rb_objspace_of, and rb_thread_struct::vm.

Referenced by rb_thread_mark().

◆ rb_get_coverages()

VALUE rb_get_coverages ( void  )

Definition at line 5004 of file thread.c.

References GET_VM.

Referenced by rb_reset_coverages(), and rb_thread_start_timer_thread().

◆ rb_iseq_check()

static const rb_iseq_t* rb_iseq_check ( const rb_iseq_t iseq)
inlinestatic

◆ rb_iseq_compile()

rb_iseq_t* rb_iseq_compile ( VALUE  src,
VALUE  file,
VALUE  line 
)

Definition at line 658 of file iseq.c.

References Qnil, and rb_iseq_compile_with_option().

◆ rb_iseq_compile_on_base()

rb_iseq_t* rb_iseq_compile_on_base ( VALUE  src,
VALUE  file,
VALUE  line,
const struct rb_block base_block 
)

Definition at line 664 of file iseq.c.

References Qnil, and rb_iseq_compile_with_option().

◆ rb_iseq_compile_with_option()

rb_iseq_t* rb_iseq_compile_with_option ( VALUE  src,
VALUE  file,
VALUE  absolute_path,
VALUE  line,
const struct rb_block base_block,
VALUE  opt 
)

◆ rb_iseq_coverage()

VALUE rb_iseq_coverage ( const rb_iseq_t iseq)

Definition at line 715 of file iseq.c.

References ISEQ_COVERAGE.

Referenced by update_coverage().

◆ rb_iseq_disasm()

VALUE rb_iseq_disasm ( const rb_iseq_t iseq)

◆ rb_iseq_disasm_insn()

int rb_iseq_disasm_insn ( VALUE  str,
const VALUE iseqval,
size_t  pos,
const rb_iseq_t iseq,
VALUE  child 
)

Disassemble a instruction Iseq -> Iseq inspect object.

Definition at line 1402 of file iseq.c.

References find_line_no(), len, PRIuSIZE, rb_insn_operand_intern(), rb_str_cat2(), rb_str_catf(), rb_str_concat(), rb_str_new(), RSTRING_LEN, and RSTRING_PTR.

Referenced by rb_iseq_disasm(), and rb_vmdebug_debug_print_pre().

◆ rb_iseq_eval()

RUBY_SYMBOL_EXPORT_BEGIN VALUE rb_iseq_eval ( const rb_iseq_t iseq)

Definition at line 2004 of file vm.c.

References GET_THREAD, rb_captured_block::val, vm_exec(), and vm_set_top_stack().

Referenced by iseqw_eval(), and rb_load_internal0().

◆ rb_iseq_eval_main()

VALUE rb_iseq_eval_main ( const rb_iseq_t iseq)

Definition at line 2014 of file vm.c.

References GET_THREAD, rb_captured_block::val, vm_exec(), and vm_set_main_stack().

Referenced by ruby_exec_internal().

◆ rb_iseq_new()

RUBY_SYMBOL_EXPORT_BEGIN rb_iseq_t* rb_iseq_new ( NODE ,
VALUE  ,
VALUE  ,
VALUE  ,
const rb_iseq_t parent,
enum  iseq_type 
)

Definition at line 436 of file iseq.c.

References INT2FIX, and rb_iseq_new_with_opt().

Referenced by Init_VM(), proc_binding(), rb_binding_add_dynavars(), and rb_vm_call_cfunc().

◆ rb_iseq_new_main()

rb_iseq_t* rb_iseq_new_main ( NODE node,
VALUE  path,
VALUE  absolute_path,
const rb_iseq_t parent 
)

Definition at line 451 of file iseq.c.

References INT2FIX, rb_fstring_cstr(), and rb_iseq_new_with_opt().

Referenced by process_options().

◆ rb_iseq_new_top()

rb_iseq_t* rb_iseq_new_top ( NODE node,
VALUE  name,
VALUE  path,
VALUE  absolute_path,
const rb_iseq_t parent 
)

Definition at line 444 of file iseq.c.

References INT2FIX, and rb_iseq_new_with_opt().

Referenced by rb_binding_add_dynavars(), and rb_load_internal0().

◆ rb_iseq_new_with_bopt()

rb_iseq_t* rb_iseq_new_with_bopt ( NODE ,
VALUE  ,
VALUE  ,
VALUE  ,
VALUE  ,
VALUE  ,
enum  iseq_type,
VALUE   
)

◆ rb_iseq_new_with_opt()

rb_iseq_t* rb_iseq_new_with_opt ( NODE ,
VALUE  ,
VALUE  ,
VALUE  ,
VALUE  ,
const rb_iseq_t parent,
enum  iseq_type,
const rb_compile_option_t  
)

◆ rb_name_err_mesg_new()

VALUE rb_name_err_mesg_new ( VALUE  mesg,
VALUE  recv,
VALUE  method 
)

◆ rb_obj_is_iseq()

static int rb_obj_is_iseq ( VALUE  iseq)
inlinestatic

Definition at line 1043 of file vm_core.h.

References imemo_iseq, RB_TYPE_P, and T_IMEMO.

Referenced by get_local_variable_ptr(), and iseqw_s_of().

◆ rb_objspace_alloc()

struct rb_objspace* rb_objspace_alloc ( void  )

◆ rb_objspace_free()

void rb_objspace_free ( struct rb_objspace )

◆ rb_postponed_job_flush()

void rb_postponed_job_flush ( rb_vm_t vm)

◆ rb_proc_alloc()

VALUE rb_proc_alloc ( VALUE  klass)

◆ rb_reset_coverages()

void rb_reset_coverages ( void  )

◆ rb_set_coverages()

void rb_set_coverages ( VALUE  )

Definition at line 5010 of file thread.c.

References GET_VM, Qnil, rb_add_event_hook(), RUBY_EVENT_COVERAGE, and update_coverage().

Referenced by rb_coverage_start().

◆ rb_signal_buff_size()

int rb_signal_buff_size ( void  )

Definition at line 709 of file signal.c.

References signal_buff.

Referenced by rb_thread_check_trap_pending(), and rb_threadptr_check_signal().

◆ rb_signal_exec()

void rb_signal_exec ( rb_thread_t th,
int  sig 
)

◆ rb_thread_alloc()

VALUE rb_thread_alloc ( VALUE  klass)

Definition at line 2564 of file vm.c.

References ruby_thread_init(), and thread_alloc().

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

◆ rb_thread_check_trap_pending()

RUBY_SYMBOL_EXPORT_BEGIN int rb_thread_check_trap_pending ( void  )

Definition at line 1226 of file thread.c.

References rb_signal_buff_size().

◆ rb_thread_method_id_and_class()

RUBY_SYMBOL_EXPORT_END int rb_thread_method_id_and_class ( rb_thread_t th,
ID idp,
ID called_idp,
VALUE klassp 
)

◆ rb_thread_reset_timer_thread()

void rb_thread_reset_timer_thread ( void  )

Definition at line 4081 of file thread.c.

Referenced by after_exec_non_async_signal_safe().

◆ rb_thread_start_timer_thread()

void rb_thread_start_timer_thread ( void  )

◆ rb_thread_stop_timer_thread()

void rb_thread_stop_timer_thread ( void  )

Definition at line 4073 of file thread.c.

Referenced by before_exec_non_async_signal_safe(), and ruby_cleanup().

◆ rb_thread_wakeup_timer_thread()

void rb_thread_wakeup_timer_thread ( void  )

Referenced by sighandler().

◆ rb_threadptr_check_signal()

void rb_threadptr_check_signal ( rb_thread_t mth)

Definition at line 4032 of file thread.c.

References rb_signal_buff_size(), and rb_threadptr_trap_interrupt().

Referenced by rb_f_kill(), ruby_cleanup(), and timer_thread_function().

◆ rb_threadptr_error_print()

void rb_threadptr_error_print ( rb_thread_t *volatile  th,
volatile VALUE  errinfo 
)

◆ rb_threadptr_exec_event_hooks()

void rb_threadptr_exec_event_hooks ( struct rb_trace_arg_struct trace_arg)

Definition at line 381 of file vm_trace.c.

References rb_threadptr_exec_event_hooks_orig().

Referenced by ruby_exec_event_hook_orig().

◆ rb_threadptr_exec_event_hooks_and_pop_frame()

void rb_threadptr_exec_event_hooks_and_pop_frame ( struct rb_trace_arg_struct trace_arg)

Definition at line 375 of file vm_trace.c.

References rb_threadptr_exec_event_hooks_orig().

Referenced by ruby_exec_event_hook_orig().

◆ rb_threadptr_execute_interrupts()

void rb_threadptr_execute_interrupts ( rb_thread_t ,
int   
)

◆ rb_threadptr_interrupt()

void rb_threadptr_interrupt ( rb_thread_t th)

◆ rb_threadptr_pending_interrupt_active_p()

int rb_threadptr_pending_interrupt_active_p ( rb_thread_t th)

◆ rb_threadptr_pending_interrupt_clear()

void rb_threadptr_pending_interrupt_clear ( rb_thread_t th)

Definition at line 1587 of file thread.c.

References rb_thread_struct::pending_interrupt_queue, and rb_ary_clear().

Referenced by rb_threadptr_to_kill().

◆ rb_threadptr_pending_interrupt_enque()

void rb_threadptr_pending_interrupt_enque ( rb_thread_t th,
VALUE  v 
)

◆ rb_threadptr_signal_exit()

void rb_threadptr_signal_exit ( rb_thread_t th)

◆ rb_threadptr_signal_raise()

void rb_threadptr_signal_raise ( rb_thread_t th,
int  sig 
)

◆ rb_threadptr_unlock_all_locking_mutexes()

void rb_threadptr_unlock_all_locking_mutexes ( rb_thread_t th)

◆ rb_vm_bugreport()

void rb_vm_bugreport ( const void *  )

◆ rb_vm_call()

VALUE rb_vm_call ( rb_thread_t th,
VALUE  recv,
VALUE  id,
int  argc,
const VALUE argv,
const rb_callable_method_entry_t me 
)

Definition at line 255 of file vm_eval.c.

References vm_call0().

Referenced by call_method_data().

◆ rb_vm_change_state()

void rb_vm_change_state ( void  )

◆ 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_env_local_variables()

VALUE rb_vm_env_local_variables ( const rb_env_t env)

◆ rb_vm_env_prev_env()

const rb_env_t* rb_vm_env_prev_env ( const rb_env_t env)

◆ rb_vm_ep_local_ep()

const VALUE* rb_vm_ep_local_ep ( const VALUE ep)

Definition at line 55 of file vm.c.

References PUREFUNC(), VM_CF_LEP(), and VM_EP_LEP().

Referenced by proc_new(), rb_vm_proc_local_ep(), and VM_STACK_ENV_WRITE().

◆ rb_vm_frame_block_handler()

VALUE rb_vm_frame_block_handler ( const rb_control_frame_t cfp)

◆ rb_vm_frame_method_entry()

const rb_callable_method_entry_t* rb_vm_frame_method_entry ( const rb_control_frame_t cfp)

◆ rb_vm_get_binding_creatable_next_cfp()

rb_control_frame_t* rb_vm_get_binding_creatable_next_cfp ( const rb_thread_t th,
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_thread_t th,
const rb_control_frame_t cfp 
)

◆ rb_vm_get_sourceline()

int rb_vm_get_sourceline ( const rb_control_frame_t )

◆ rb_vm_gvl_destroy()

void rb_vm_gvl_destroy ( rb_vm_t vm)

Definition at line 342 of file thread.c.

References rb_vm_struct::thread_destruct_lock.

Referenced by ruby_vm_destruct().

◆ rb_vm_inc_const_missing_count()

void rb_vm_inc_const_missing_count ( void  )

Definition at line 323 of file vm.c.

References rb_class_path_no_cache().

◆ rb_vm_invoke_proc()

VALUE rb_vm_invoke_proc ( rb_thread_t th,
rb_proc_t proc,
int  argc,
const VALUE argv,
VALUE  block_handler 
)

◆ rb_vm_living_threads_init()

static void rb_vm_living_threads_init ( rb_vm_t vm)
inlinestatic

◆ rb_vm_living_threads_insert()

static void rb_vm_living_threads_insert ( rb_vm_t vm,
rb_thread_t th 
)
inlinestatic

◆ rb_vm_living_threads_remove()

static void rb_vm_living_threads_remove ( rb_vm_t vm,
rb_thread_t th 
)
inlinestatic

Definition at line 1460 of file vm_core.h.

References rb_vm_struct::living_thread_num, and rb_thread_struct::vmlt_node.

Referenced by thread_start_func_2().

◆ rb_vm_make_binding()

VALUE rb_vm_make_binding ( rb_thread_t th,
const rb_control_frame_t src_cfp 
)

◆ rb_vm_make_proc()

VALUE rb_vm_make_proc ( rb_thread_t th,
const struct rb_captured_block captured,
VALUE  klass 
)

◆ rb_vm_make_proc_lambda()

VALUE rb_vm_make_proc_lambda ( rb_thread_t th,
const struct rb_captured_block captured,
VALUE  klass,
int8_t  is_lambda 
)

◆ rb_vm_pop_frame()

void rb_vm_pop_frame ( rb_thread_t th)

◆ rb_vm_proc_local_ep()

const VALUE* rb_vm_proc_local_ep ( VALUE  proc)

Definition at line 558 of file thread.c.

References NULL, rb_vm_ep_local_ep(), and vm_proc_ep().

Referenced by rb_fiber_start(), thread_do_start(), and VM_STACK_ENV_WRITE().

◆ rb_vm_register_special_exception()

void rb_vm_register_special_exception ( enum ruby_special_exceptions  sp,
VALUE  exception_class,
const char *  mesg 
)

◆ rb_vm_rewind_cfp()

void rb_vm_rewind_cfp ( rb_thread_t th,
rb_control_frame_t cfp 
)

◆ rb_vm_rewrite_cref()

void rb_vm_rewrite_cref ( rb_cref_t node,
VALUE  old_klass,
VALUE  new_klass,
rb_cref_t **  new_cref_ptr 
)

◆ rb_vm_stack_to_heap()

void rb_vm_stack_to_heap ( rb_thread_t th)

◆ rb_vmdebug_debug_print_post()

void rb_vmdebug_debug_print_post ( rb_thread_t th,
rb_control_frame_t cfp 
)

◆ rb_vmdebug_debug_print_pre()

void rb_vmdebug_debug_print_pre ( rb_thread_t th,
rb_control_frame_t cfp,
const VALUE _pc 
)

◆ rb_vmdebug_stack_dump_raw()

void rb_vmdebug_stack_dump_raw ( rb_thread_t ,
rb_control_frame_t  
)

◆ ruby_exec_event_hook_orig()

static void ruby_exec_event_hook_orig ( rb_thread_t *const  th,
const rb_event_flag_t  flag,
VALUE  self,
ID  id,
ID  called_id,
VALUE  klass,
VALUE  data,
int  pop_p 
)
inlinestatic

◆ ruby_node_name()

const char* ruby_node_name ( int  node)

Definition at line 1739 of file iseq.c.

References rb_bug().

Referenced by dump_node(), dump_object(), iseq_compile_each(), rb_raw_obj_info(), and ruby_debug_print_node().

◆ ruby_thread_init_stack()

void ruby_thread_init_stack ( rb_thread_t th)

Definition at line 552 of file thread.c.

Referenced by Init_BareVM().

◆ ruby_vm_check_ints()

static void ruby_vm_check_ints ( rb_thread_t th)
inlinestatic

Definition at line 1571 of file vm_core.h.

References rb_threadptr_execute_interrupts(), RUBY_VM_INTERRUPTED_ANY, and UNLIKELY.

◆ VM_BH_FROM_IFUNC_BLOCK()

static VALUE VM_BH_FROM_IFUNC_BLOCK ( const struct rb_captured_block captured)
inlinestatic

◆ VM_BH_FROM_ISEQ_BLOCK()

static VALUE VM_BH_FROM_ISEQ_BLOCK ( const struct rb_captured_block captured)
inlinestatic

◆ VM_BH_FROM_PROC()

static VALUE VM_BH_FROM_PROC ( VALUE  procval)
inlinestatic

◆ VM_BH_FROM_SYMBOL()

static VALUE VM_BH_FROM_SYMBOL ( VALUE  symbol)
inlinestatic

Definition at line 1384 of file vm_core.h.

References rb_block::symbol, SYMBOL_P, and VM_ASSERT.

Referenced by vm_proc_to_block_handler().

◆ VM_BH_IFUNC_P()

static int VM_BH_IFUNC_P ( VALUE  block_handler)
inlinestatic

◆ VM_BH_ISEQ_BLOCK_P()

static int VM_BH_ISEQ_BLOCK_P ( VALUE  block_handler)
inlinestatic

◆ VM_BH_TO_CAPT_BLOCK()

static const struct rb_captured_block* VM_BH_TO_CAPT_BLOCK ( VALUE  block_handler)
static

◆ VM_BH_TO_IFUNC_BLOCK()

static const struct rb_captured_block* VM_BH_TO_IFUNC_BLOCK ( VALUE  block_handler)
static

◆ VM_BH_TO_ISEQ_BLOCK()

static const struct rb_captured_block* VM_BH_TO_ISEQ_BLOCK ( VALUE  block_handler)
static

◆ VM_BH_TO_PROC()

static VALUE VM_BH_TO_PROC ( VALUE  block_handler)
inlinestatic

◆ VM_BH_TO_SYMBOL()

static VALUE VM_BH_TO_SYMBOL ( VALUE  block_handler)
inlinestatic

◆ vm_block_ep()

static const VALUE * vm_block_ep ( const struct rb_block block)
inlinestatic

◆ vm_block_handler_type()

static enum rb_block_handler_type vm_block_handler_type ( VALUE  block_handler)
inlinestatic

◆ vm_block_handler_verify()

static int vm_block_handler_verify ( VALUE  block_handler)
inlinestatic

◆ vm_block_iseq()

static const rb_iseq_t * vm_block_iseq ( const struct rb_block block)
inlinestatic

◆ vm_block_self()

static VALUE vm_block_self ( const struct rb_block block)
inlinestatic

◆ vm_block_type()

static enum rb_block_type vm_block_type ( const struct rb_block block)
inlinestatic

◆ vm_block_type_set()

static void vm_block_type_set ( const struct rb_block block,
enum rb_block_type  type 
)
inlinestatic

Definition at line 1304 of file vm_core.h.

References rb_block::type.

Referenced by cfunc_proc_new(), rb_proc_create(), rb_proc_create_from_captured(), and sym_proc_new().

◆ VM_ENV_BLOCK_HANDLER()

static VALUE VM_ENV_BLOCK_HANDLER ( const VALUE ep)
inlinestatic

◆ VM_ENV_ENVVAL()

static VALUE VM_ENV_ENVVAL ( const VALUE ep)
inlinestatic

◆ VM_ENV_ENVVAL_PTR()

static const rb_env_t* VM_ENV_ENVVAL_PTR ( const VALUE ep)
inlinestatic

◆ VM_ENV_ESCAPED_P()

static int VM_ENV_ESCAPED_P ( const VALUE ep)
inlinestatic

◆ VM_ENV_FLAGS()

static unsigned long VM_ENV_FLAGS ( const VALUE ep,
long  flag 
)
inlinestatic

◆ VM_ENV_FLAGS_SET()

static void VM_ENV_FLAGS_SET ( const VALUE ep,
VALUE  flag 
)
inlinestatic

◆ VM_ENV_FLAGS_UNSET()

static void VM_ENV_FLAGS_UNSET ( const VALUE ep,
VALUE  flag 
)
inlinestatic

◆ VM_ENV_LOCAL_P()

static int VM_ENV_LOCAL_P ( const VALUE ep)
inlinestatic

◆ vm_env_new()

static const rb_env_t* vm_env_new ( VALUE env_ep,
VALUE env_body,
unsigned int  env_size,
const rb_iseq_t iseq 
)
inlinestatic

Definition at line 1139 of file vm_core.h.

References env, rb_env_t::env_size, env_size(), imemo_env, rb_imemo_new(), and VM_ENV_DATA_INDEX_ENV.

Referenced by env_clone(), and vm_make_env_each().

◆ VM_ENV_PREV_EP()

static const VALUE* VM_ENV_PREV_EP ( const VALUE ep)
inlinestatic

◆ VM_ENV_PROCVAL()

static VALUE VM_ENV_PROCVAL ( const VALUE ep)
inlinestatic

◆ VM_FORCE_WRITE()

static void VM_FORCE_WRITE ( const VALUE ptr,
VALUE  v 
)
inlinestatic

◆ VM_FORCE_WRITE_SPECIAL_CONST()

static void VM_FORCE_WRITE_SPECIAL_CONST ( const VALUE ptr,
VALUE  special_const_value 
)
inlinestatic

◆ VM_FRAME_BMETHOD_P()

static int VM_FRAME_BMETHOD_P ( const rb_control_frame_t cfp)
inlinestatic

Definition at line 1037 of file vm_core.h.

References rb_control_frame_struct::ep, VM_ENV_FLAGS(), and VM_FRAME_FLAG_BMETHOD.

Referenced by hook_before_rewind().

◆ VM_FRAME_CFRAME_P()

static int VM_FRAME_CFRAME_P ( const rb_control_frame_t cfp)
inlinestatic

◆ VM_FRAME_FINISHED_P()

static int VM_FRAME_FINISHED_P ( const rb_control_frame_t cfp)
inlinestatic

◆ VM_FRAME_RUBYFRAME_P()

static int VM_FRAME_RUBYFRAME_P ( const rb_control_frame_t cfp)
inlinestatic

◆ VM_FRAME_TYPE()

static unsigned long VM_FRAME_TYPE ( const rb_control_frame_t cfp)
inlinestatic

◆ vm_proc_block()

static const struct rb_block* vm_proc_block ( VALUE  procval)
static

◆ vm_proc_ep()

static const VALUE* vm_proc_ep ( VALUE  procval)
inlinestatic

Definition at line 1329 of file vm_core.h.

References vm_block_ep(), and vm_proc_block().

Referenced by rb_vm_proc_local_ep(), and vm_block_ep().

◆ vm_proc_iseq()

static const rb_iseq_t* vm_proc_iseq ( VALUE  procval)
inlinestatic

◆ VM_STACK_ENV_WRITE()

static void VM_STACK_ENV_WRITE ( const VALUE ep,
int  index,
VALUE  v 
)
inlinestatic

Variable Documentation

◆ rb_cISeq

RUBY_EXTERN VALUE rb_cISeq

Definition at line 858 of file vm_core.h.

◆ rb_cRubyVM

RUBY_EXTERN VALUE rb_cRubyVM

Definition at line 859 of file vm_core.h.

◆ rb_mRubyVMFrozenCore

RUBY_EXTERN VALUE rb_mRubyVMFrozenCore

Definition at line 860 of file vm_core.h.

◆ ruby_binding_data_type

const rb_data_type_t ruby_binding_data_type

Definition at line 297 of file proc.c.

Referenced by eval_string_with_cref().

◆ ruby_current_thread

rb_thread_t* ruby_current_thread

Definition at line 316 of file vm.c.

◆ ruby_current_vm

rb_vm_t* ruby_current_vm

Definition at line 317 of file vm.c.

Referenced by Init_VM().

◆ ruby_threadptr_data_type

const rb_data_type_t ruby_threadptr_data_type

Definition at line 2476 of file vm.c.

◆ ruby_vm_event_flags

rb_event_flag_t ruby_vm_event_flags

Definition at line 318 of file vm.c.

Referenced by recalc_add_ruby_vm_event_flags(), and recalc_remove_ruby_vm_event_flags().