iseq.c File Reference

#include "ruby/ruby.h"
#include "internal.h"
#include "eval_intern.h"
#include "gc.h"
#include "vm_core.h"
#include "iseq.h"
#include "insns.inc"
#include "insns_info.inc"
#include "node_name.inc"

Go to the source code of this file.

Data Structures

struct  set_specifc_data

Defines

#define ISEQ_MAJOR_VERSION   2
#define ISEQ_MINOR_VERSION   1
#define hidden_obj_p(obj)   (!SPECIAL_CONST_P(obj) && !RBASIC(obj)->klass)
#define ISEQ_SET_CREF(iseq, cref)   RB_OBJ_WRITE((iseq)->self, &(iseq)->cref_stack, (cref))
#define SET_COMPILE_OPTION(o, h, mem)
#define SET_COMPILE_OPTION_NUM(o, h, mem)
#define SET_COMPILE_OPTION(o, h, mem)   rb_hash_aset((h), ID2SYM(rb_intern(#mem)), (o)->mem ? Qtrue : Qfalse)
#define SET_COMPILE_OPTION_NUM(o, h, mem)   rb_hash_aset((h), ID2SYM(rb_intern(#mem)), INT2NUM((o)->mem))
#define CHECK_ARRAY(v)   rb_convert_type((v), T_ARRAY, "Array", "to_ary")
#define CHECK_STRING(v)   rb_convert_type((v), T_STRING, "String", "to_str")
#define CHECK_SYMBOL(v)   rb_convert_type((v), T_SYMBOL, "Symbol", "to_sym")
#define DECL_SYMBOL(name)   static VALUE sym_##name
#define INIT_SYMBOL(name)   sym_##name = ID2SYM(rb_intern(#name))
#define PARAM_TYPE(type)   rb_ary_push(a = rb_ary_new2(2), ID2SYM(type))
#define PARAM_ID(i)   iseq->local_table[(i)]
#define PARAM(i, type)
#define ALLOC_AND_COPY(dst, src, type, size)

Functions

static VALUE obj_resurrect (VALUE obj)
static void compile_data_free (struct iseq_compile_data *compile_data)
static void iseq_free (void *ptr)
static void iseq_mark (void *ptr)
static size_t iseq_memsize (const void *ptr)
static VALUE iseq_alloc (VALUE klass)
static rb_iseq_location_tiseq_location_setup (rb_iseq_t *iseq, VALUE path, VALUE absolute_path, VALUE name, size_t first_lineno)
static void set_relation (rb_iseq_t *iseq, const VALUE parent)
void rb_iseq_add_mark_object (rb_iseq_t *iseq, VALUE obj)
static VALUE prepare_iseq_build (rb_iseq_t *iseq, VALUE name, VALUE path, VALUE absolute_path, VALUE first_lineno, VALUE parent, enum iseq_type type, VALUE block_opt, const rb_compile_option_t *option)
static VALUE cleanup_iseq_build (rb_iseq_t *iseq)
static void make_compile_option (rb_compile_option_t *option, VALUE opt)
static VALUE make_compile_option_value (rb_compile_option_t *option)
VALUE rb_iseq_new (NODE *node, VALUE name, VALUE path, VALUE absolute_path, VALUE parent, enum iseq_type type)
VALUE rb_iseq_new_top (NODE *node, VALUE name, VALUE path, VALUE absolute_path, VALUE parent)
VALUE rb_iseq_new_main (NODE *node, VALUE path, VALUE absolute_path)
static VALUE rb_iseq_new_with_bopt_and_opt (NODE *node, VALUE name, VALUE path, VALUE absolute_path, VALUE first_lineno, VALUE parent, enum iseq_type type, VALUE bopt, const rb_compile_option_t *option)
VALUE rb_iseq_new_with_opt (NODE *node, VALUE name, VALUE path, VALUE absolute_path, VALUE first_lineno, VALUE parent, enum iseq_type type, const rb_compile_option_t *option)
VALUE rb_iseq_new_with_bopt (NODE *node, VALUE name, VALUE path, VALUE absolute_path, VALUE first_lineno, VALUE parent, enum iseq_type type, VALUE bopt)
static VALUE CHECK_INTEGER (VALUE v)
static VALUE iseq_load (VALUE self, VALUE data, VALUE parent, VALUE opt)
static VALUE iseq_s_load (int argc, VALUE *argv, VALUE self)
VALUE rb_iseq_load (VALUE data, VALUE parent, VALUE opt)
VALUE rb_iseq_compile_with_option (VALUE src, VALUE file, VALUE absolute_path, VALUE line, rb_block_t *base_block, VALUE opt)
VALUE rb_iseq_compile (VALUE src, VALUE file, VALUE line)
VALUE rb_iseq_compile_on_base (VALUE src, VALUE file, VALUE line, rb_block_t *base_block)
static VALUE iseq_s_compile (int argc, VALUE *argv, VALUE self)
static VALUE iseq_s_compile_file (int argc, VALUE *argv, VALUE self)
static VALUE iseq_s_compile_option_set (VALUE self, VALUE opt)
static VALUE iseq_s_compile_option_get (VALUE self)
static rb_iseq_tiseq_check (VALUE val)
static VALUE iseq_eval (VALUE self)
static VALUE iseq_inspect (VALUE self)
VALUE rb_iseq_path (VALUE self)
VALUE rb_iseq_absolute_path (VALUE self)
VALUE rb_iseq_label (VALUE self)
VALUE rb_iseq_base_label (VALUE self)
VALUE rb_iseq_first_lineno (VALUE self)
VALUE rb_iseq_klass (VALUE self)
VALUE rb_iseq_method_name (VALUE self)
static VALUE iseq_data_to_ary (rb_iseq_t *iseq)
static VALUE iseq_to_a (VALUE self)
static struct iseq_line_info_entryget_line_info (const rb_iseq_t *iseq, size_t pos)
static unsigned int find_line_no (const rb_iseq_t *iseq, size_t pos)
unsigned int rb_iseq_line_no (const rb_iseq_t *iseq, size_t pos)
static VALUE id_to_name (ID id, VALUE default_value)
VALUE rb_insn_operand_intern (rb_iseq_t *iseq, VALUE insn, int op_no, VALUE op, int len, size_t pos, VALUE *pnop, VALUE child)
int rb_iseq_disasm_insn (VALUE ret, VALUE *iseq, size_t pos, rb_iseq_t *iseqdat, VALUE child)
 Disassemble a instruction Iseq -> Iseq inspect object.
static const char * catch_type (int type)
VALUE rb_iseq_disasm (VALUE self)
static VALUE iseq_s_of (VALUE klass, VALUE body)
static VALUE iseq_s_disasm (VALUE klass, VALUE body)
const char * ruby_node_name (int node)
static VALUE register_label (struct st_table *table, unsigned long idx)
static VALUE exception_type2symbol (VALUE type)
static int cdhash_each (VALUE key, VALUE value, VALUE ary)
VALUE rb_iseq_clone (VALUE iseqval, VALUE newcbase)
VALUE rb_iseq_parameters (const rb_iseq_t *iseq, int is_proc)
VALUE rb_iseq_defined_string (enum defined_type type)
VALUE rb_iseq_build_for_ruby2cext (const rb_iseq_t *iseq_template, const rb_insn_func_t *func, const struct iseq_line_info_entry *line_info_table, const char **local_table, const VALUE *arg_opt_table, const struct iseq_catch_table_entry *catch_table, const char *name, const char *path, const unsigned short first_lineno)
int rb_iseq_line_trace_each (VALUE iseqval, int(*func)(int line, rb_event_flag_t *events_ptr, void *d), void *data)
static int collect_trace (int line, rb_event_flag_t *events_ptr, void *ptr)
VALUE rb_iseq_line_trace_all (VALUE iseqval)
static int line_trace_specify (int line, rb_event_flag_t *events_ptr, void *ptr)
VALUE rb_iseq_line_trace_specify (VALUE iseqval, VALUE pos, VALUE set)
void Init_ISeq (void)

Variables

VALUE rb_cISeq
static const rb_data_type_t iseq_data_type
static rb_compile_option_t COMPILE_OPTION_DEFAULT
static const rb_compile_option_t COMPILE_OPTION_FALSE = {0}


Define Documentation

#define ALLOC_AND_COPY ( dst,
src,
type,
size   ) 

Value:

do { \
  if (size) { \
      (dst) = ALLOC_N(type, (size)); \
      MEMCPY((dst), (src), type, (size)); \
  } \
} while (0)

Referenced by rb_iseq_build_for_ruby2cext().

#define CHECK_ARRAY (  )     rb_convert_type((v), T_ARRAY, "Array", "to_ary")

Definition at line 472 of file iseq.c.

#define CHECK_STRING (  )     rb_convert_type((v), T_STRING, "String", "to_str")

Definition at line 473 of file iseq.c.

#define CHECK_SYMBOL (  )     rb_convert_type((v), T_SYMBOL, "Symbol", "to_sym")

Definition at line 474 of file iseq.c.

#define DECL_SYMBOL ( name   )     static VALUE sym_##name

Definition at line 1613 of file iseq.c.

Referenced by iseq_data_to_ary().

#define hidden_obj_p ( obj   )     (!SPECIAL_CONST_P(obj) && !RBASIC(obj)->klass)

Definition at line 29 of file iseq.c.

Referenced by obj_resurrect().

#define INIT_SYMBOL ( name   )     sym_##name = ID2SYM(rb_intern(#name))

Definition at line 1616 of file iseq.c.

Referenced by iseq_data_to_ary().

#define ISEQ_MAJOR_VERSION   2

Definition at line 24 of file iseq.c.

#define ISEQ_MINOR_VERSION   1

Definition at line 25 of file iseq.c.

#define ISEQ_SET_CREF ( iseq,
cref   )     RB_OBJ_WRITE((iseq)->self, &(iseq)->cref_stack, (cref))

Definition at line 199 of file iseq.c.

Referenced by rb_iseq_clone(), and set_relation().

#define PARAM ( i,
type   ) 

Value:

(                     \
        PARAM_TYPE(type),                     \
        rb_id2str(PARAM_ID(i)) ?              \
        rb_ary_push(a, ID2SYM(PARAM_ID(i))) : \
        a)

Referenced by rb_iseq_parameters().

#define PARAM_ID (  )     iseq->local_table[(i)]

Referenced by rb_iseq_parameters().

#define PARAM_TYPE ( type   )     rb_ary_push(a = rb_ary_new2(2), ID2SYM(type))

Referenced by rb_iseq_parameters().

#define SET_COMPILE_OPTION ( o,
h,
mem   )     rb_hash_aset((h), ID2SYM(rb_intern(#mem)), (o)->mem ? Qtrue : Qfalse)

#define SET_COMPILE_OPTION ( o,
h,
mem   ) 

Value:

{ VALUE flag = rb_hash_aref((h), ID2SYM(rb_intern(#mem))); \
      if (flag == Qtrue)  { (o)->mem = 1; } \
      else if (flag == Qfalse)  { (o)->mem = 0; } \
  }

Referenced by make_compile_option(), and make_compile_option_value().

#define SET_COMPILE_OPTION_NUM ( o,
h,
mem   )     rb_hash_aset((h), ID2SYM(rb_intern(#mem)), INT2NUM((o)->mem))

#define SET_COMPILE_OPTION_NUM ( o,
h,
mem   ) 

Value:

{ VALUE num = rb_hash_aref(opt, ID2SYM(rb_intern(#mem))); \
      if (!NIL_P(num)) (o)->mem = NUM2INT(num); \
  }

Referenced by make_compile_option(), and make_compile_option_value().


Function Documentation

static const char* catch_type ( int  type  )  [static]

Definition at line 1338 of file iseq.c.

References rb_bug().

Referenced by iseq_set_exception_table(), and rb_iseq_disasm().

static int cdhash_each ( VALUE  key,
VALUE  value,
VALUE  ary 
) [static]

Definition at line 1649 of file iseq.c.

References obj_resurrect(), rb_ary_push(), and ST_CONTINUE.

static VALUE CHECK_INTEGER ( VALUE  v  )  [inline, static]

Definition at line 475 of file iseq.c.

References NUM2LONG.

static VALUE cleanup_iseq_build ( rb_iseq_t iseq  )  [static]

Definition at line 319 of file iseq.c.

References rb_iseq_struct::compile_data, compile_data_free(), err, iseq_compile_data::err_info, rb_iseq_struct::location, rb_iseq_location_struct::path, Qtrue, rb_exc_raise(), rb_funcall2, rb_intern, RTEST, and VALUE.

Referenced by iseq_load(), and rb_iseq_new_with_bopt_and_opt().

static int collect_trace ( int  line,
rb_event_flag_t events_ptr,
void *  ptr 
) [static]

Definition at line 2173 of file iseq.c.

References INT2NUM, rb_ary_push(), result, and VALUE.

Referenced by rb_iseq_line_trace_all().

static void compile_data_free ( struct iseq_compile_data compile_data  )  [static]

Definition at line 48 of file iseq.c.

References iseq_compile_data_storage::next, ruby_xfree(), and iseq_compile_data::storage_head.

Referenced by cleanup_iseq_build(), and iseq_free().

static VALUE exception_type2symbol ( VALUE  type  )  [static]

Definition at line 1632 of file iseq.c.

References CONST_ID, id, ID2SYM, and rb_bug().

static unsigned int find_line_no ( const rb_iseq_t iseq,
size_t  pos 
) [static]

Definition at line 1122 of file iseq.c.

References get_line_info(), and iseq_line_info_entry::line_no.

Referenced by rb_iseq_disasm_insn(), rb_iseq_line_no(), and rb_iseq_line_trace_each().

static struct iseq_line_info_entry* get_line_info ( const rb_iseq_t iseq,
size_t  pos 
) [static]

Definition at line 1087 of file iseq.c.

References debug, rb_iseq_struct::line_info_size, rb_iseq_struct::line_info_table, iseq_line_info_entry::line_no, iseq_line_info_entry::position, PRIdSIZE, and size.

Referenced by find_line_no().

static VALUE id_to_name ( ID  id,
VALUE  default_value 
) [static]

Definition at line 1145 of file iseq.c.

References rb_id2str(), rb_str_inspect(), rb_str_symname_p(), and VALUE.

Referenced by rb_insn_operand_intern().

void Init_ISeq ( void   ) 

Definition at line 2277 of file iseq.c.

References iseq_alloc(), iseq_eval(), iseq_inspect(), iseq_s_compile(), iseq_s_compile_file(), iseq_s_compile_option_get(), iseq_s_compile_option_set(), iseq_s_disasm(), iseq_s_load(), iseq_s_of(), iseq_to_a(), rb_cISeq, rb_cObject, rb_cRubyVM, rb_define_alloc_func(), rb_define_class_under(), rb_define_method(), rb_define_private_method(), rb_define_singleton_method(), rb_iseq_absolute_path(), rb_iseq_base_label(), rb_iseq_disasm(), rb_iseq_first_lineno(), rb_iseq_label(), rb_iseq_line_trace_all(), rb_iseq_line_trace_specify(), and rb_iseq_path().

static VALUE iseq_alloc ( VALUE  klass  )  [static]

Definition at line 176 of file iseq.c.

References iseq_data_type, and TypedData_Make_Struct.

Referenced by Init_ISeq(), iseq_load(), rb_iseq_build_for_ruby2cext(), rb_iseq_clone(), and rb_iseq_new_with_bopt_and_opt().

static rb_iseq_t* iseq_check ( VALUE  val  )  [static]

Definition at line 790 of file iseq.c.

References GetISeqPtr, rb_iseq_location_struct::label, rb_iseq_struct::location, rb_eTypeError, and rb_raise().

Referenced by iseq_to_a(), and rb_iseq_disasm().

static VALUE iseq_data_to_ary ( rb_iseq_t iseq  )  [static]

Definition at line 1657 of file iseq.c.

References rb_iseq_struct::arg_block, rb_iseq_struct::arg_opt_table, rb_iseq_struct::arg_opts, rb_iseq_struct::arg_post_len, rb_iseq_struct::arg_post_start, rb_iseq_struct::arg_rest, rb_iseq_struct::arg_simple, rb_iseq_struct::argc, args, DECL_SYMBOL, ID2SYM, if(), INIT_SYMBOL, INT2FIX, rb_iseq_struct::local_table, rb_iseq_struct::local_table_size, main(), rb_ary_new(), rb_ary_push(), rb_bug(), rb_hash_new(), rb_id2str(), rb_intern, register_label(), st_init_numtable(), top, rb_iseq_struct::type, type, val, and VALUE.

Referenced by iseq_to_a().

static VALUE iseq_eval ( VALUE  self  )  [static]

Definition at line 809 of file iseq.c.

References rb_iseq_eval(), and rb_secure().

Referenced by Init_ISeq().

static void iseq_free ( void *  ptr  )  [static]

Definition at line 63 of file iseq.c.

References rb_iseq_struct::arg_keyword_table, rb_iseq_struct::arg_opt_table, rb_iseq_struct::callinfo_entries, rb_iseq_struct::catch_table, rb_iseq_struct::compile_data, compile_data_free(), rb_iseq_struct::is_entries, rb_iseq_struct::iseq, rb_iseq_struct::iseq_encoded, rb_iseq_location_struct::label, rb_iseq_struct::line_info_table, rb_iseq_struct::local_table, rb_iseq_struct::location, rb_iseq_struct::orig, rb_iseq_location_struct::path, RSTRING_PTR, RUBY_FREE_ENTER, RUBY_FREE_LEAVE, RUBY_FREE_UNLESS_NULL, RUBY_GC_INFO, and ruby_xfree().

static VALUE iseq_inspect ( VALUE  self  )  [static]

Definition at line 820 of file iseq.c.

References GetISeqPtr, rb_iseq_location_struct::label, rb_iseq_struct::location, rb_iseq_location_struct::path, rb_obj_classname(), rb_sprintf(), and RSTRING_PTR.

Referenced by Init_ISeq(), and rb_iseq_disasm().

static VALUE iseq_load ( VALUE  self,
VALUE  data,
VALUE  parent,
VALUE  opt 
) [static]

Definition at line 477 of file iseq.c.

References args, ATOMIC_PTR_CAS, CHECK_ARRAY, CHECK_INTEGER(), CHECK_STRING, CHECK_SYMBOL, cleanup_iseq_build(), FIXNUM_P, GetISeqPtr, ID2SYM, iseq_alloc(), rb_iseq_struct::local_iseq, make_compile_option(), name, NIL_P, prepare_iseq_build(), PRIsVALUE, Qnil, rb_ary_entry(), rb_eTypeError, rb_id2str(), rb_intern, rb_iseq_build_from_ary(), rb_raise(), rb_iseq_struct::self, st_data_t, st_free_table(), st_init_numtable(), st_insert(), st_lookup(), SYM2ID, type, and VALUE.

Referenced by iseq_s_load(), and rb_iseq_load().

static rb_iseq_location_t* iseq_location_setup ( rb_iseq_t iseq,
VALUE  path,
VALUE  absolute_path,
VALUE  name,
size_t  first_lineno 
) [static]

Definition at line 183 of file iseq.c.

References rb_iseq_location_struct::absolute_path, rb_iseq_location_struct::base_label, rb_iseq_location_struct::first_lineno, rb_iseq_location_struct::label, rb_iseq_struct::location, rb_iseq_location_struct::path, RB_OBJ_WRITE, rb_str_cmp(), RTEST, and rb_iseq_struct::self.

Referenced by prepare_iseq_build().

static void iseq_mark ( void *  ptr  )  [static]

Definition at line 97 of file iseq.c.

References rb_iseq_location_struct::absolute_path, rb_iseq_location_struct::base_label, iseq_compile_data::catch_table_ary, rb_iseq_struct::compile_data, rb_iseq_struct::coverage, rb_iseq_struct::cref_stack, iseq_compile_data::err_info, rb_iseq_struct::klass, rb_iseq_location_struct::label, rb_iseq_struct::location, iseq_compile_data::mark_ary, rb_iseq_struct::mark_ary, rb_iseq_struct::orig, rb_iseq_location_struct::path, RSTRING_PTR, RUBY_GC_INFO, RUBY_MARK_ENTER, RUBY_MARK_LEAVE, RUBY_MARK_UNLESS_NULL, and VALUE.

static size_t iseq_memsize ( const void *  ptr  )  [static]

Definition at line 128 of file iseq.c.

References rb_iseq_struct::callinfo_size, rb_iseq_struct::catch_table_size, rb_iseq_struct::compile_data, iseq_catch_table_entry::iseq, rb_iseq_struct::iseq, rb_iseq_struct::iseq_encoded, rb_iseq_struct::iseq_size, rb_iseq_struct::line_info_size, rb_iseq_struct::local_table_size, iseq_compile_data_storage::next, rb_iseq_struct::orig, iseq_compile_data_storage::size, size, iseq_compile_data::storage_head, and VALUE.

static VALUE iseq_s_compile ( int  argc,
VALUE *  argv,
VALUE  self 
) [static]

Definition at line 675 of file iseq.c.

References INT2FIX, NIL_P, Qnil, rb_iseq_compile_with_option(), rb_scan_args(), rb_secure(), rb_str_new2, and VALUE.

Referenced by Init_ISeq().

static VALUE iseq_s_compile_file ( int  argc,
VALUE *  argv,
VALUE  self 
) [static]

Definition at line 709 of file iseq.c.

References f, FilePathValue, INT2FIX, make_compile_option(), node, NUM2INT, Qfalse, Qnil, rb_file_open_str(), rb_iseq_new_with_opt(), rb_parser_compile_file(), rb_parser_new(), rb_realpath_internal(), rb_scan_args(), rb_secure(), rb_str_new2, StringValueCStr, and VALUE.

Referenced by Init_ISeq().

static VALUE iseq_s_compile_option_get ( VALUE  self  )  [static]

Definition at line 784 of file iseq.c.

References COMPILE_OPTION_DEFAULT, and make_compile_option_value().

Referenced by Init_ISeq().

static VALUE iseq_s_compile_option_set ( VALUE  self,
VALUE  opt 
) [static]

Definition at line 766 of file iseq.c.

References COMPILE_OPTION_DEFAULT, make_compile_option(), and rb_secure().

Referenced by Init_ISeq().

static VALUE iseq_s_disasm ( VALUE  klass,
VALUE  body 
) [static]

Definition at line 1596 of file iseq.c.

References iseq_s_of(), NIL_P, Qnil, rb_iseq_disasm(), and VALUE.

Referenced by Init_ISeq().

static VALUE iseq_s_load ( int  argc,
VALUE *  argv,
VALUE  self 
) [static]

Definition at line 574 of file iseq.c.

References iseq_load(), Qnil, rb_scan_args(), and VALUE.

Referenced by Init_ISeq().

static VALUE iseq_s_of ( VALUE  klass,
VALUE  body 
) [static]

Definition at line 1521 of file iseq.c.

References rb_proc_t::block, GetProcPtr, rb_block_struct::iseq, Qnil, rb_method_get_iseq(), rb_obj_is_proc(), rb_secure(), RUBY_VM_NORMAL_ISEQ_P, rb_iseq_struct::self, and VALUE.

Referenced by Init_ISeq(), and iseq_s_disasm().

static VALUE iseq_to_a ( VALUE  self  )  [static]

Definition at line 1076 of file iseq.c.

References iseq_check(), iseq_data_to_ary(), and rb_secure().

Referenced by Init_ISeq().

static int line_trace_specify ( int  line,
rb_event_flag_t events_ptr,
void *  ptr 
) [static]

Definition at line 2200 of file iseq.c.

References set_specifc_data::pos, set_specifc_data::prev, RUBY_EVENT_SPECIFIED_LINE, and set_specifc_data::set.

Referenced by rb_iseq_line_trace_specify().

static void make_compile_option ( rb_compile_option_t option,
VALUE  opt 
) [static]

Definition at line 346 of file iseq.c.

References CLASS_OF, COMPILE_OPTION_DEFAULT, COMPILE_OPTION_FALSE, iseq_compile_data::option, Qfalse, Qnil, Qtrue, rb_cHash, rb_eTypeError, rb_raise(), SET_COMPILE_OPTION, and SET_COMPILE_OPTION_NUM.

Referenced by iseq_load(), iseq_s_compile_file(), iseq_s_compile_option_set(), and rb_iseq_compile_with_option().

static VALUE make_compile_option_value ( rb_compile_option_t option  )  [static]

Definition at line 389 of file iseq.c.

References iseq_compile_data::option, rb_hash_new(), SET_COMPILE_OPTION, SET_COMPILE_OPTION_NUM, and VALUE.

Referenced by iseq_s_compile_option_get().

static VALUE obj_resurrect ( VALUE  obj  )  [inline, static]

Definition at line 32 of file iseq.c.

References BUILTIN_TYPE, hidden_obj_p, rb_ary_resurrect(), rb_str_resurrect(), T_ARRAY, and T_STRING.

Referenced by cdhash_each(), and rb_insn_operand_intern().

static VALUE prepare_iseq_build ( rb_iseq_t iseq,
VALUE  name,
VALUE  path,
VALUE  absolute_path,
VALUE  first_lineno,
VALUE  parent,
enum iseq_type  type,
VALUE  block_opt,
const rb_compile_option_t option 
) [static]

Definition at line 255 of file iseq.c.

References ALLOC, ALLOC_N, rb_iseq_struct::arg_block, rb_iseq_struct::arg_keyword, rb_iseq_struct::arg_rest, rb_iseq_location_struct::base_label, iseq_compile_data_storage::buff, iseq_compile_data::catch_table_ary, rb_iseq_struct::compile_data, rb_iseq_struct::coverage, rb_iseq_struct::defined_method_id, iseq_compile_data::err_info, GET_THREAD(), INITIAL_ISEQ_COMPILE_DATA_STORAGE_BUFF_SIZE, iseq_location_setup(), rb_iseq_struct::klass, rb_iseq_location_struct::label, iseq_compile_data::last_coverable_line, rb_iseq_struct::local_iseq, rb_iseq_struct::location, iseq_compile_data::mark_ary, rb_iseq_struct::mark_ary, MEMZERO, iseq_compile_data_storage::next, NIL_P, iseq_compile_data::option, iseq_compile_data_storage::pos, Qfalse, Qnil, Qtrue, rb_ary_new(), rb_ary_tmp_new(), rb_fstring(), rb_get_coverages(), rb_hash_lookup, RB_OBJ_WRITE, RTEST, rb_iseq_struct::self, set_relation(), iseq_compile_data_storage::size, iseq_compile_data::storage_current, iseq_compile_data::storage_head, rb_iseq_struct::type, and VALUE.

Referenced by iseq_load(), and rb_iseq_new_with_bopt_and_opt().

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

Definition at line 1158 of file iseq.c.

References rb_call_info_struct::blockiseq, CLASS_OF, rb_call_info_struct::flag, rb_global_entry::id, ID2SYM, id_to_name(), INT2FIX, rb_iseq_struct::is_entries, rb_iseq_location_struct::label, level, rb_iseq_struct::local_size, rb_iseq_struct::local_table, rb_iseq_struct::location, rb_call_info_struct::mid, obj_resurrect(), rb_call_info_struct::orig_argc, rb_iseq_struct::parent_iseq, PRIdPTRDIFF, PRIdVALUE, PRIsVALUE, PRIuVALUE, rb_ary_join(), rb_ary_new(), rb_ary_push(), rb_bug(), rb_cISeq, rb_id2name(), rb_id2str(), rb_inspect(), rb_sprintf(), rb_str_dup(), rb_str_new2, rb_iseq_struct::self, type, VALUE, VM_CALL_ARGS_BLOCKARG, VM_CALL_ARGS_SKIP_SETUP, VM_CALL_ARGS_SPLAT, VM_CALL_FCALL, VM_CALL_OPT_SEND, VM_CALL_SUPER, VM_CALL_TAILCALL, and VM_CALL_VCALL.

Referenced by rb_iseq_disasm_insn().

VALUE rb_iseq_absolute_path ( VALUE  self  ) 

Definition at line 881 of file iseq.c.

References rb_iseq_location_struct::absolute_path, GetISeqPtr, and rb_iseq_struct::location.

Referenced by Init_ISeq(), and rb_profile_frame_absolute_path().

void rb_iseq_add_mark_object ( rb_iseq_t iseq,
VALUE  obj 
)

Definition at line 245 of file iseq.c.

References rb_iseq_struct::mark_ary, rb_ary_push(), rb_ary_tmp_new(), RB_OBJ_WRITE, RBASIC_CLEAR_CLASS, RTEST, and rb_iseq_struct::self.

Referenced by iseq_add_mark_object().

VALUE rb_iseq_base_label ( VALUE  self  ) 

Definition at line 940 of file iseq.c.

References rb_iseq_location_struct::base_label, GetISeqPtr, and rb_iseq_struct::location.

Referenced by Init_ISeq(), and rb_profile_frame_base_label().

VALUE rb_iseq_build_for_ruby2cext ( const rb_iseq_t iseq_template,
const rb_insn_func_t func,
const struct iseq_line_info_entry line_info_table,
const char **  local_table,
const VALUE *  arg_opt_table,
const struct iseq_catch_table_entry catch_table,
const char *  name,
const char *  path,
const unsigned short  first_lineno 
)

Definition at line 2080 of file iseq.c.

References ALLOC_AND_COPY, ALLOC_N, GetISeqPtr, iseq_catch_table_entry::iseq, iseq_alloc(), MEMCPY, rb_cISeq, rb_iseq_translate_threaded_code(), RB_OBJ_WRITE, rb_str_new2, set_relation(), and VALUE.

VALUE rb_iseq_clone ( VALUE  iseqval,
VALUE  newcbase 
)

Definition at line 1922 of file iseq.c.

References rb_iseq_struct::cref_stack, GetISeqPtr, iseq_alloc(), ISEQ_SET_CREF, rb_iseq_struct::local_iseq, MEMCPY, NEW_CREF, rb_iseq_struct::orig, rb_cISeq, RB_OBJ_WRITE, rb_iseq_struct::self, and VALUE.

Referenced by clone_method(), and vm_define_method().

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

Definition at line 642 of file iseq.c.

References Qnil, and rb_iseq_compile_with_option().

VALUE rb_iseq_compile_on_base ( VALUE  src,
VALUE  file,
VALUE  line,
rb_block_t base_block 
)

Definition at line 648 of file iseq.c.

References Qnil, and rb_iseq_compile_with_option().

VALUE rb_iseq_compile_with_option ( VALUE  src,
VALUE  file,
VALUE  absolute_path,
VALUE  line,
rb_block_t base_block,
VALUE  opt 
)

Definition at line 589 of file iseq.c.

References rb_thread_struct::base_block, EXEC_TAG, GET_THREAD(), rb_block_struct::iseq, JUMP_TAG, rb_iseq_location_struct::label, rb_iseq_struct::location, make_compile_option(), node, NUM2INT, Qfalse, Qundef, rb_exc_raise(), rb_iseq_new_with_opt(), rb_parser_compile_file_path(), rb_parser_compile_string_path(), rb_parser_new(), rb_str_new2, RB_TYPE_P, rb_iseq_struct::self, StringValueCStr, T_FILE, TH_POP_TAG, TH_PUSH_TAG, and VALUE.

Referenced by eval_string_with_cref(), iseq_s_compile(), rb_iseq_compile(), and rb_iseq_compile_on_base().

VALUE rb_iseq_defined_string ( enum defined_type  type  ) 

Definition at line 2039 of file iseq.c.

References GET_VM, numberof, OBJ_FREEZE, rb_str_new_cstr(), ruby_xcalloc(), and VALUE.

Referenced by defined_expr().

VALUE rb_iseq_disasm ( VALUE  self  ) 

Definition at line 1378 of file iseq.c.

References rb_iseq_struct::catch_table, rb_iseq_struct::catch_table_size, catch_type(), if(), rb_iseq_struct::iseq, iseq_check(), iseq_inspect(), rb_iseq_struct::iseq_size, rb_ary_new(), rb_iseq_disasm(), rb_secure(), rb_str_cat2(), rb_str_catf(), rb_str_concat(), rb_str_new(), rb_str_resize(), RSTRING_LEN, RSTRING_PTR, rb_iseq_struct::self, size, and VALUE.

Referenced by eval_string_with_cref(), Init_ISeq(), iseq_s_disasm(), iseq_setup(), and rb_iseq_disasm().

int rb_iseq_disasm_insn ( VALUE  ret,
VALUE *  iseq,
size_t  pos,
rb_iseq_t iseqdat,
VALUE  child 
)

Disassemble a instruction Iseq -> Iseq inspect object.

Definition at line 1286 of file iseq.c.

References find_line_no(), len, prev, PRIdSIZE, rb_insn_operand_intern(), rb_str_cat2(), rb_str_catf(), rb_str_concat(), rb_str_new(), RSTRING_LEN, RSTRING_PTR, and VALUE.

Referenced by rb_vmdebug_debug_print_pre().

VALUE rb_iseq_first_lineno ( VALUE  self  ) 

Definition at line 958 of file iseq.c.

References rb_iseq_location_struct::first_lineno, GetISeqPtr, and rb_iseq_struct::location.

Referenced by Init_ISeq(), iseq_location(), proc_binding(), proc_to_s(), rb_method_entry_make(), and rb_profile_frame_first_lineno().

VALUE rb_iseq_klass ( VALUE  self  ) 

Definition at line 966 of file iseq.c.

References GetISeqPtr, rb_iseq_struct::klass, and rb_iseq_struct::local_iseq.

Referenced by rb_profile_frame_classpath(), and rb_profile_frame_singleton_method_p().

VALUE rb_iseq_label ( VALUE  self  ) 

Definition at line 912 of file iseq.c.

References GetISeqPtr, rb_iseq_location_struct::label, and rb_iseq_struct::location.

Referenced by Init_ISeq(), and rb_profile_frame_label().

unsigned int rb_iseq_line_no ( const rb_iseq_t iseq,
size_t  pos 
)

Definition at line 1134 of file iseq.c.

References find_line_no().

Referenced by calc_lineno().

VALUE rb_iseq_line_trace_all ( VALUE  iseqval  ) 

Definition at line 2186 of file iseq.c.

References collect_trace(), rb_ary_new(), rb_iseq_line_trace_each(), result, and VALUE.

Referenced by Init_ISeq().

int rb_iseq_line_trace_each ( VALUE  iseqval,
int(*)(int line, rb_event_flag_t *events_ptr, void *d)  func,
void *  data 
)

Definition at line 2139 of file iseq.c.

References iseq_catch_table_entry::cont, find_line_no(), GetISeqPtr, if(), iseq_catch_table_entry::iseq, RUBY_EVENT_LINE, RUBY_EVENT_SPECIFIED_LINE, and VALUE.

Referenced by rb_iseq_line_trace_all(), and rb_iseq_line_trace_specify().

VALUE rb_iseq_line_trace_specify ( VALUE  iseqval,
VALUE  pos,
VALUE  set 
)

Definition at line 2233 of file iseq.c.

References line_trace_specify(), NUM2INT, set_specifc_data::pos, set_specifc_data::prev, Qfalse, Qtrue, rb_eTypeError, rb_iseq_line_trace_each(), rb_raise(), and set_specifc_data::set.

Referenced by Init_ISeq().

VALUE rb_iseq_load ( VALUE  data,
VALUE  parent,
VALUE  opt 
)

Definition at line 583 of file iseq.c.

References iseq_load(), and rb_cISeq.

Referenced by iseq_build_from_ary_exception(), and iseq_build_load_iseq().

VALUE rb_iseq_method_name ( VALUE  self  ) 

Definition at line 974 of file iseq.c.

References rb_iseq_location_struct::base_label, GetISeqPtr, rb_iseq_struct::local_iseq, rb_iseq_struct::location, Qnil, and rb_iseq_struct::type.

Referenced by rb_profile_frame_method_name(), and rb_profile_frame_qualified_method_name().

VALUE rb_iseq_new ( NODE node,
VALUE  name,
VALUE  path,
VALUE  absolute_path,
VALUE  parent,
enum iseq_type  type 
)

Definition at line 413 of file iseq.c.

References COMPILE_OPTION_DEFAULT, INT2FIX, node, and rb_iseq_new_with_opt().

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

VALUE rb_iseq_new_main ( NODE node,
VALUE  path,
VALUE  absolute_path 
)

Definition at line 428 of file iseq.c.

References rb_thread_struct::base_block, COMPILE_OPTION_DEFAULT, GET_THREAD(), INT2FIX, rb_block_struct::iseq, node, rb_iseq_new_with_opt(), rb_str_new2, rb_iseq_struct::self, and VALUE.

VALUE rb_iseq_new_top ( NODE node,
VALUE  name,
VALUE  path,
VALUE  absolute_path,
VALUE  parent 
)

Definition at line 421 of file iseq.c.

References COMPILE_OPTION_DEFAULT, INT2FIX, node, and rb_iseq_new_with_opt().

Referenced by rb_load_internal0().

VALUE rb_iseq_new_with_bopt ( NODE node,
VALUE  name,
VALUE  path,
VALUE  absolute_path,
VALUE  first_lineno,
VALUE  parent,
enum iseq_type  type,
VALUE  bopt 
)

Definition at line 464 of file iseq.c.

References COMPILE_OPTION_DEFAULT, node, and rb_iseq_new_with_bopt_and_opt().

static VALUE rb_iseq_new_with_bopt_and_opt ( NODE node,
VALUE  name,
VALUE  path,
VALUE  absolute_path,
VALUE  first_lineno,
VALUE  parent,
enum iseq_type  type,
VALUE  bopt,
const rb_compile_option_t option 
) [static]

Definition at line 437 of file iseq.c.

References cleanup_iseq_build(), GetISeqPtr, iseq_alloc(), node, iseq_compile_data::option, prepare_iseq_build(), rb_cISeq, rb_iseq_compile_node(), rb_iseq_struct::self, and VALUE.

Referenced by rb_iseq_new_with_bopt(), and rb_iseq_new_with_opt().

VALUE rb_iseq_new_with_opt ( NODE node,
VALUE  name,
VALUE  path,
VALUE  absolute_path,
VALUE  first_lineno,
VALUE  parent,
enum iseq_type  type,
const rb_compile_option_t option 
)

Definition at line 454 of file iseq.c.

References node, iseq_compile_data::option, Qfalse, and rb_iseq_new_with_bopt_and_opt().

Referenced by iseq_s_compile_file(), new_child_iseq(), rb_iseq_compile_with_option(), rb_iseq_new(), rb_iseq_new_main(), and rb_iseq_new_top().

VALUE rb_iseq_parameters ( const rb_iseq_t iseq,
int  is_proc 
)

Definition at line 1953 of file iseq.c.

References args, CONST_ID, ID2SYM, iseq_catch_table_entry::iseq, key, PARAM, PARAM_ID, PARAM_TYPE, Qnil, rb_ary_new2, rb_ary_push(), rb_id2str(), and VALUE.

Referenced by rb_method_parameters(), and rb_proc_parameters().

VALUE rb_iseq_path ( VALUE  self  ) 

Definition at line 857 of file iseq.c.

References GetISeqPtr, rb_iseq_struct::location, and rb_iseq_location_struct::path.

Referenced by Init_ISeq(), and rb_profile_frame_path().

static VALUE register_label ( struct st_table table,
unsigned long  idx 
) [static]

Definition at line 1620 of file iseq.c.

References CHAR_BIT, ID2SYM, rb_intern, snprintf, st_insert(), sym, and VALUE.

const char* ruby_node_name ( int  node  ) 

Definition at line 1603 of file iseq.c.

References rb_bug().

Referenced by compile_array_(), dump_object(), iseq_compile_each(), iseq_set_arguments(), ruby_debug_print_node(), and setup_args().

static void set_relation ( rb_iseq_t iseq,
const VALUE  parent 
) [static]

Definition at line 202 of file iseq.c.

References rb_iseq_struct::cref_stack, GET_THREAD(), GetISeqPtr, ISEQ_SET_CREF, rb_iseq_struct::local_iseq, NEW_CREF, NOEX_PRIVATE, rb_iseq_struct::parent_iseq, Qnil, rb_cObject, RB_OBJ_WRITE, RTEST, rb_iseq_struct::self, rb_thread_struct::top_wrapper, rb_iseq_struct::type, type, and VALUE.

Referenced by prepare_iseq_build(), and rb_iseq_build_for_ruby2cext().


Variable Documentation

rb_compile_option_t COMPILE_OPTION_DEFAULT [static]

Initial value:

Definition at line 333 of file iseq.c.

Referenced by iseq_s_compile_option_get(), iseq_s_compile_option_set(), make_compile_option(), rb_iseq_new(), rb_iseq_new_main(), rb_iseq_new_top(), and rb_iseq_new_with_bopt().

const rb_compile_option_t COMPILE_OPTION_FALSE = {0} [static]

Definition at line 343 of file iseq.c.

Referenced by make_compile_option().

const rb_data_type_t iseq_data_type [static]

Initial value:

Definition at line 164 of file iseq.c.

Referenced by iseq_alloc().

VALUE rb_cISeq

Definition at line 27 of file iseq.c.

Referenced by Init_ISeq(), iseq_build_load_iseq(), rb_insn_operand_intern(), rb_iseq_build_for_ruby2cext(), rb_iseq_clone(), rb_iseq_load(), and rb_iseq_new_with_bopt_and_opt().


Generated on 19 Jul 2016 for Ruby by  doxygen 1.4.7