Ruby  1.9.3p448(2013-06-27revision41675)
Macros | Functions
vm_insnhelper.c File Reference
#include "insns.inc"
#include <math.h>
#include "constant.h"
#include "internal.h"
Include dependency graph for vm_insnhelper.c:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define INLINE   inline
 
#define COLLECT_PROFILE   0
 
#define VM_CALLEE_SETUP_ARG(ret, th, iseq, orig_argc, orig_argv, block)
 
#define USE_IC_FOR_IVAR   1
 

Functions

static rb_control_frame_tvm_get_ruby_level_caller_cfp (rb_thread_t *th, rb_control_frame_t *cfp)
 
static rb_control_frame_tvm_push_frame (rb_thread_t *th, const rb_iseq_t *iseq, VALUE type, VALUE self, VALUE specval, const VALUE *pc, VALUE *sp, VALUE *lfp, int local_size)
 
static void vm_pop_frame (rb_thread_t *th)
 
 NORETURN (static void argument_error(const rb_iseq_t *iseq, int miss_argc, int correct_argc))
 
static void argument_error (const rb_iseq_t *iseq, int miss_argc, int correct_argc)
 
static int vm_callee_setup_arg_complex (rb_thread_t *th, const rb_iseq_t *iseq, int orig_argc, VALUE *orig_argv, const rb_block_t **block)
 
static int caller_setup_args (const rb_thread_t *th, rb_control_frame_t *cfp, VALUE flag, int argc, rb_iseq_t *blockiseq, rb_block_t **block)
 
static VALUE call_cfunc (VALUE(*func)(), VALUE recv, int len, int argc, const VALUE *argv)
 
static VALUE vm_call_cfunc (rb_thread_t *th, rb_control_frame_t *reg_cfp, int num, volatile VALUE recv, const rb_block_t *blockptr, const rb_method_entry_t *me)
 
static VALUE vm_call_bmethod (rb_thread_t *th, VALUE recv, int argc, const VALUE *argv, const rb_block_t *blockptr, const rb_method_entry_t *me)
 
static void vm_method_missing_args (rb_thread_t *th, VALUE *argv, int num, const rb_block_t *blockptr, int opt)
 
static VALUE vm_method_missing (rb_thread_t *th, ID id, VALUE recv, int num, const rb_block_t *blockptr, int opt)
 
static void vm_setup_method (rb_thread_t *th, rb_control_frame_t *cfp, VALUE recv, int argc, const rb_block_t *blockptr, VALUE flag, const rb_method_entry_t *me)
 
static VALUE vm_call_method (rb_thread_t *th, rb_control_frame_t *cfp, int num, const rb_block_t *blockptr, VALUE flag, ID id, const rb_method_entry_t *me, VALUE recv)
 
static int block_proc_is_lambda (const VALUE procval)
 
static VALUE vm_yield_with_cfunc (rb_thread_t *th, const rb_block_t *block, VALUE self, int argc, const VALUE *argv, const rb_block_t *blockargptr)
 
static int vm_yield_setup_block_args_complex (rb_thread_t *th, const rb_iseq_t *iseq, int argc, VALUE *argv)
 
static int vm_yield_setup_block_args (rb_thread_t *th, const rb_iseq_t *iseq, int orig_argc, VALUE *argv, const rb_block_t *blockptr)
 
static int vm_yield_setup_args (rb_thread_t *const th, const rb_iseq_t *iseq, int argc, VALUE *argv, const rb_block_t *blockptr, int lambda)
 
static VALUE vm_invoke_block (rb_thread_t *th, rb_control_frame_t *reg_cfp, rb_num_t num, rb_num_t flag)
 
static NODElfp_svar_place (rb_thread_t *th, VALUE *lfp)
 
static VALUE lfp_svar_get (rb_thread_t *th, VALUE *lfp, rb_num_t key)
 
static void lfp_svar_set (rb_thread_t *th, VALUE *lfp, rb_num_t key, VALUE val)
 
static VALUE vm_getspecial (rb_thread_t *th, VALUE *lfp, rb_num_t key, rb_num_t type)
 
static NODEvm_get_cref0 (const rb_iseq_t *iseq, const VALUE *lfp, const VALUE *dfp)
 
static NODEvm_get_cref (const rb_iseq_t *iseq, const VALUE *lfp, const VALUE *dfp)
 
static NODEvm_cref_push (rb_thread_t *th, VALUE klass, int noex, rb_block_t *blockptr)
 
static VALUE vm_get_cbase (const rb_iseq_t *iseq, const VALUE *lfp, const VALUE *dfp)
 
static VALUE vm_get_const_base (const rb_iseq_t *iseq, const VALUE *lfp, const VALUE *dfp)
 
static void vm_check_if_namespace (VALUE klass)
 
static VALUE vm_get_ev_const (rb_thread_t *th, const rb_iseq_t *iseq, VALUE orig_klass, ID id, int is_defined)
 
static VALUE vm_get_cvar_base (NODE *cref)
 
static VALUE vm_search_const_defined_class (const VALUE cbase, ID id)
 
static VALUE vm_getivar (VALUE obj, ID id, IC ic)
 
static void vm_setivar (VALUE obj, ID id, VALUE val, IC ic)
 
static const rb_method_entry_tvm_method_search (VALUE id, VALUE klass, IC ic)
 
static VALUE vm_search_normal_superclass (VALUE klass, VALUE recv)
 
static void vm_search_superclass (rb_control_frame_t *reg_cfp, rb_iseq_t *iseq, VALUE recv, VALUE sigval, ID *idp, VALUE *klassp)
 
static VALUE vm_throw (rb_thread_t *th, rb_control_frame_t *reg_cfp, rb_num_t throw_state, VALUE throwobj)
 
static void vm_expandarray (rb_control_frame_t *cfp, VALUE ary, rb_num_t num, int flag)
 
static int check_cfunc (const rb_method_entry_t *me, VALUE(*func)())
 
static VALUE opt_eq_func (VALUE recv, VALUE obj, IC ic)
 

Macro Definition Documentation

#define COLLECT_PROFILE   0
#define INLINE   inline

Definition at line 20 of file vm_insnhelper.c.

#define USE_IC_FOR_IVAR   1

Definition at line 1267 of file vm_insnhelper.c.

#define VM_CALLEE_SETUP_ARG (   ret,
  th,
  iseq,
  orig_argc,
  orig_argv,
  block 
)
Value:
if (LIKELY((iseq)->arg_simple & 0x01)) { \
/* simple check */ \
if ((orig_argc) != (iseq)->argc) { \
argument_error((iseq), (orig_argc), (iseq)->argc); \
} \
(ret) = 0; \
} \
else { \
(ret) = vm_callee_setup_arg_complex((th), (iseq), (orig_argc), (orig_argv), (block)); \
}
if(len<=MAX_WORD_LENGTH &&len >=MIN_WORD_LENGTH)
Definition: name2ctype.h:23841
#define LIKELY(x)
Definition: vm_core.h:110
static int vm_callee_setup_arg_complex(rb_thread_t *th, const rb_iseq_t *iseq, int orig_argc, VALUE *orig_argv, const rb_block_t **block)
int argc
Definition: ruby.c:120
static void argument_error(const rb_iseq_t *iseq, int miss_argc, int correct_argc)

Definition at line 135 of file vm_insnhelper.c.

Referenced by vm_setup_method(), and vm_yield_setup_args().

Function Documentation

static void argument_error ( const rb_iseq_t iseq,
int  miss_argc,
int  correct_argc 
)
static
static int block_proc_is_lambda ( const VALUE  procval)
inlinestatic

Definition at line 684 of file vm_insnhelper.c.

References GetProcPtr, and rb_proc_t::is_lambda.

Referenced by invoke_block_from_c(), vm_invoke_block(), and vm_yield_with_cfunc().

static VALUE call_cfunc ( VALUE(*)()  func,
VALUE  recv,
int  len,
int  argc,
const VALUE argv 
)
inlinestatic

Definition at line 302 of file vm_insnhelper.c.

References argc, argv, func, Qundef, rb_ary_new4(), rb_eArgError, and rb_raise().

Referenced by vm_call0(), and vm_call_cfunc().

static int caller_setup_args ( const rb_thread_t th,
rb_control_frame_t cfp,
VALUE  flag,
int  argc,
rb_iseq_t blockiseq,
rb_block_t **  block 
)
inlinestatic
static int check_cfunc ( const rb_method_entry_t me,
VALUE(*)()  func 
)
inlinestatic
static VALUE lfp_svar_get ( rb_thread_t th,
VALUE lfp,
rb_num_t  key 
)
static
static NODE* lfp_svar_place ( rb_thread_t th,
VALUE lfp 
)
inlinestatic

Definition at line 963 of file vm_insnhelper.c.

References rb_thread_struct::local_lfp, rb_thread_struct::local_svar, NEW_IF, NIL_P, and Qnil.

Referenced by lfp_svar_get(), and lfp_svar_set().

static void lfp_svar_set ( rb_thread_t th,
VALUE lfp,
rb_num_t  key,
VALUE  val 
)
static
NORETURN ( static void   argument_errorconst rb_iseq_t *iseq, int miss_argc, int correct_argc)
static VALUE opt_eq_func ( VALUE  recv,
VALUE  obj,
IC  ic 
)
inlinestatic
static VALUE vm_call_bmethod ( rb_thread_t th,
VALUE  recv,
int  argc,
const VALUE argv,
const rb_block_t blockptr,
const rb_method_entry_t me 
)
inlinestatic
static VALUE vm_call_cfunc ( rb_thread_t th,
rb_control_frame_t reg_cfp,
int  num,
volatile VALUE  recv,
const rb_block_t blockptr,
const rb_method_entry_t me 
)
inlinestatic
static VALUE vm_call_method ( rb_thread_t th,
rb_control_frame_t cfp,
int  num,
const rb_block_t blockptr,
VALUE  flag,
ID  id,
const rb_method_entry_t me,
VALUE  recv 
)
inlinestatic
static int vm_callee_setup_arg_complex ( rb_thread_t th,
const rb_iseq_t iseq,
int  orig_argc,
VALUE orig_argv,
const rb_block_t **  block 
)
inlinestatic
static void vm_check_if_namespace ( VALUE  klass)
inlinestatic

Definition at line 1138 of file vm_insnhelper.c.

References rb_eTypeError, rb_inspect(), rb_raise(), StringValuePtr, T_CLASS, T_MODULE, and TYPE.

Referenced by vm_get_ev_const().

static NODE* vm_cref_push ( rb_thread_t th,
VALUE  klass,
int  noex,
rb_block_t blockptr 
)
static
static void vm_expandarray ( rb_control_frame_t cfp,
VALUE  ary,
rb_num_t  num,
int  flag 
)
inlinestatic
static VALUE vm_get_cbase ( const rb_iseq_t iseq,
const VALUE lfp,
const VALUE dfp 
)
inlinestatic

Definition at line 1105 of file vm_insnhelper.c.

References Qundef, and vm_get_cref().

Referenced by rb_vm_cbase().

static VALUE vm_get_const_base ( const rb_iseq_t iseq,
const VALUE lfp,
const VALUE dfp 
)
inlinestatic

Definition at line 1121 of file vm_insnhelper.c.

References RNode::flags, NODE_FL_CREF_PUSHED_BY_EVAL, Qundef, and vm_get_cref().

static NODE* vm_get_cref ( const rb_iseq_t iseq,
const VALUE lfp,
const VALUE dfp 
)
static

Definition at line 1077 of file vm_insnhelper.c.

References rb_bug(), and vm_get_cref0().

Referenced by rb_vm_cref(), vm_get_cbase(), vm_get_const_base(), and vm_get_ev_const().

static NODE* vm_get_cref0 ( const rb_iseq_t iseq,
const VALUE lfp,
const VALUE dfp 
)
static

Definition at line 1062 of file vm_insnhelper.c.

References rb_iseq_struct::cref_stack, GET_PREV_DFP, NULL, Qnil, and RUBY_VM_NORMAL_ISEQ_P.

Referenced by vm_cref_push(), and vm_get_cref().

static VALUE vm_get_cvar_base ( NODE cref)
inlinestatic
static VALUE vm_get_ev_const ( rb_thread_t th,
const rb_iseq_t iseq,
VALUE  orig_klass,
ID  id,
int  is_defined 
)
inlinestatic
static rb_control_frame_t* vm_get_ruby_level_caller_cfp ( rb_thread_t th,
rb_control_frame_t cfp 
)
static

Referenced by vm_cref_push().

static VALUE vm_getivar ( VALUE  obj,
ID  id,
IC  ic 
)
static
static VALUE vm_getspecial ( rb_thread_t th,
VALUE lfp,
rb_num_t  key,
rb_num_t  type 
)
inlinestatic
static VALUE vm_invoke_block ( rb_thread_t th,
rb_control_frame_t reg_cfp,
rb_num_t  num,
rb_num_t  flag 
)
static
static VALUE vm_method_missing ( rb_thread_t th,
ID  id,
VALUE  recv,
int  num,
const rb_block_t blockptr,
int  opt 
)
inlinestatic

Definition at line 448 of file vm_insnhelper.c.

References ALLOCA_N, argv, ID2SYM, rb_funcall2(), and vm_method_missing_args().

Referenced by vm_call_method().

static void vm_method_missing_args ( rb_thread_t th,
VALUE argv,
int  num,
const rb_block_t blockptr,
int  opt 
)
inlinestatic
static const rb_method_entry_t* vm_method_search ( VALUE  id,
VALUE  klass,
IC  ic 
)
inlinestatic
static void vm_pop_frame ( rb_thread_t th)
inlinestatic
static rb_control_frame_t* vm_push_frame ( rb_thread_t th,
const rb_iseq_t iseq,
VALUE  type,
VALUE  self,
VALUE  specval,
const VALUE pc,
VALUE sp,
VALUE lfp,
int  local_size 
)
inlinestatic
static VALUE vm_search_const_defined_class ( const VALUE  cbase,
ID  id 
)
static

Definition at line 1253 of file vm_insnhelper.c.

References rb_cObject, rb_const_defined_at(), and RCLASS_SUPER.

static VALUE vm_search_normal_superclass ( VALUE  klass,
VALUE  recv 
)
inlinestatic
static void vm_search_superclass ( rb_control_frame_t reg_cfp,
rb_iseq_t iseq,
VALUE  recv,
VALUE  sigval,
ID idp,
VALUE klassp 
)
static
static void vm_setivar ( VALUE  obj,
ID  id,
VALUE  val,
IC  ic 
)
static
static void vm_setup_method ( rb_thread_t th,
rb_control_frame_t cfp,
VALUE  recv,
int  argc,
const rb_block_t blockptr,
VALUE  flag,
const rb_method_entry_t me 
)
inlinestatic
static VALUE vm_throw ( rb_thread_t th,
rb_control_frame_t reg_cfp,
rb_num_t  throw_state,
VALUE  throwobj 
)
static
static int vm_yield_setup_args ( rb_thread_t *const  th,
const rb_iseq_t iseq,
int  argc,
VALUE argv,
const rb_block_t blockptr,
int  lambda 
)
inlinestatic
static int vm_yield_setup_block_args ( rb_thread_t th,
const rb_iseq_t iseq,
int  orig_argc,
VALUE argv,
const rb_block_t blockptr 
)
inlinestatic
static int vm_yield_setup_block_args_complex ( rb_thread_t th,
const rb_iseq_t iseq,
int  argc,
VALUE argv 
)
inlinestatic
static VALUE vm_yield_with_cfunc ( rb_thread_t th,
const rb_block_t block,
VALUE  self,
int  argc,
const VALUE argv,
const rb_block_t blockargptr 
)
inlinestatic