Ruby 1.9.2p136(2010-12-25revision30365)

- Main Page
- Modules
- Data Structures
- Files

- File List
- Globals

Defines | Functions | Variables

# iseq.c File Reference

`#include "ruby/ruby.h"`
`#include "gc.h"`
`#include "vm_core.h"`
`#include "iseq.h"`
`#include "insns.inc"`
`#include "insns_info.inc"`
`#include "node_name.inc"`
Include dependency graph for iseq.c:

Go to the source code of this file.

## Defines
#define | hidden_obj_p(obj) (!SPECIAL_CONST_P(obj) && !RBASIC(obj)->klass)
#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 void | set_relation (rb_iseq_t *iseq, const VALUE parent)
VALUE | rb_realpath_internal (VALUE basedir, VALUE path, int strict)
static VALUE | prepare_iseq_build (rb_iseq_t *iseq, VALUE name, VALUE filename, VALUE filepath, VALUE line_no, VALUE parent, VALUE 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 filename, VALUE filepath, VALUE parent, VALUE type)
VALUE | rb_iseq_new_top (NODE *node, VALUE name, VALUE filename, VALUE filepath, VALUE parent)
VALUE | rb_iseq_new_main (NODE *node, VALUE filename, VALUE filepath)
static VALUE | rb_iseq_new_with_bopt_and_opt (NODE *node, VALUE name, VALUE filename, VALUE filepath, VALUE line_no, VALUE parent, VALUE type, VALUE bopt, const rb_compile_option_t *option)
VALUE | rb_iseq_new_with_opt (NODE *node, VALUE name, VALUE filename, VALUE filepath, VALUE line_no, VALUE parent, VALUE type, const rb_compile_option_t *option)
VALUE | rb_iseq_new_with_bopt (NODE *node, VALUE name, VALUE filename, VALUE filepath, VALUE line_no, VALUE parent, VALUE 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)
static NODE * | parse_string (VALUE str, const char *file, int line)
VALUE | rb_iseq_compile_with_option (VALUE src, VALUE file, VALUE filepath, VALUE line, VALUE opt)
VALUE | rb_iseq_compile (VALUE src, VALUE file, VALUE line)
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_t * | iseq_check (VALUE val)
static VALUE | iseq_eval (VALUE self)
static VALUE | iseq_inspect (VALUE self)
static VALUE | iseq_data_to_ary (rb_iseq_t *iseq)
static VALUE | iseq_to_a (VALUE self)
int | rb_iseq_first_lineno (rb_iseq_t *iseq)
static struct iseq_insn_info_entry * | get_insn_info (const rb_iseq_t *iseq, const unsigned long pos)
static unsigned short | find_line_no (rb_iseq_t *iseq, unsigned long pos)
static unsigned short | find_prev_line_no (rb_iseq_t *iseqdat, unsigned long pos)
static VALUE | 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_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_build_for_ruby2cext (const rb_iseq_t *iseq_template, const rb_insn_func_t *func, const struct iseq_insn_info_entry *insn_info_table, const char **local_table, const VALUE *arg_opt_table, const struct iseq_catch_table_entry *catch_table, const char *name, const char *filename, const unsigned short line_no)
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 | ( |  | v | ) | rb_convert_type(v, T_ARRAY, "Array", "to_ary")

Definition at line 434 of file iseq.c.

Referenced by iseq_load().

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

Definition at line 435 of file iseq.c.

Referenced by iseq_load().

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

Definition at line 436 of file iseq.c.

Referenced by iseq_load().

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

Definition at line 1055 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 24 of file iseq.c.

Referenced by obj_resurrect().

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

Definition at line 1058 of file iseq.c.

Referenced by iseq_data_to_ary().

#define PARAM | ( |  | i,
|  |  | type
| ) |  |

Value:

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

Referenced by rb_iseq_parameters().

#define PARAM_ID | ( |  | i | ) | 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
| ) |  |

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 | ( |  | o,
|  |  | h,
|  |  | mem
| ) |  | rb_hash_aset(h, ID2SYM(rb_intern(#mem)), o->mem ? Qtrue : Qfalse)

#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().

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

## Function Documentation

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

Definition at line 895 of file iseq.c.

References CATCH_TYPE_BREAK, CATCH_TYPE_ENSURE, CATCH_TYPE_NEXT, CATCH_TYPE_REDO, CATCH_TYPE_RESCUE, CATCH_TYPE_RETRY, and rb_bug().

Referenced by rb_iseq_disasm().

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

Definition at line 1091 of file iseq.c.

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

Referenced by iseq_data_to_ary().

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

Definition at line 437 of file iseq.c.

References NUM2LONG().

Referenced by iseq_load().

static VALUE cleanup_iseq_build | ( | rb_iseq_t * | iseq | ) | `[static]`

Definition at line 284 of file iseq.c.

References rb_iseq_struct::compile_data, compile_data_free(), err, iseq_compile_data::err_info, rb_iseq_struct::filename, Qtrue, rb_exc_raise(), rb_funcall2(), rb_intern, and RTEST.

Referenced by iseq_load(), and rb_iseq_new_with_bopt_and_opt().

static void compile_data_free | ( | struct iseq_compile_data * | compile_data | ) | `[static]`

Definition at line 43 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 1074 of file iseq.c.

References CATCH_TYPE_BREAK, CATCH_TYPE_ENSURE, CATCH_TYPE_NEXT, CATCH_TYPE_REDO, CATCH_TYPE_RESCUE, CATCH_TYPE_RETRY, CONST_ID, id, ID2SYM, and rb_bug().

Referenced by iseq_data_to_ary().

static unsigned short find_line_no | ( | rb_iseq_t * | iseq,
|  | unsigned long | pos
| ) |  | `[static]`

Definition at line 697 of file iseq.c.

References get_insn_info(), and iseq_insn_info_entry::line_no.

Referenced by rb_iseq_disasm_insn().

static unsigned short find_prev_line_no | ( | rb_iseq_t * | iseqdat,
|  | unsigned long | pos
| ) |  | `[static]`

Definition at line 709 of file iseq.c.

References rb_iseq_struct::insn_info_size, rb_iseq_struct::insn_info_table, iseq_insn_info_entry::line_no, iseq_insn_info_entry::position, and size.

Referenced by rb_iseq_disasm_insn().

static struct iseq_insn_info_entry* get_insn_info | ( | const rb_iseq_t * | iseq,
|  | const unsigned long | pos
| ) |  | `[static, read]`

Definition at line 682 of file iseq.c.

References rb_iseq_struct::insn_info_size, rb_iseq_struct::insn_info_table, iseq_insn_info_entry::position, and size.

Referenced by find_line_no(), and rb_iseq_disasm_insn().

void Init_ISeq | ( | void |  | ) |

Definition at line 1497 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_to_a(), rb_cISeq, rb_cObject, rb_cRubyVM, rb_define_alloc_func(), rb_define_class_under(), rb_define_method(), rb_define_singleton_method(), and rb_iseq_disasm().

static VALUE insn_operand_intern | ( | rb_iseq_t * | iseq,
|  | VALUE | insn,
|  | int | op_no,
|  | VALUE | op,
|  | int | len,
|  | size_t | pos,
|  | VALUE * | pnop,
|  | VALUE | child
| ) |  | `[static]`

Definition at line 729 of file iseq.c.

References CLASS_OF, rb_iseq_struct::ic_entries, rb_global_entry::id, ID2SYM, INT2FIX, rb_iseq_struct::local_iseq, rb_iseq_struct::local_size, rb_iseq_struct::local_table, rb_iseq_struct::name, name, obj_resurrect(), rb_iseq_struct::parent_iseq, PRIdPTRDIFF, 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, and type.

Referenced by rb_iseq_disasm_insn().

static VALUE iseq_alloc | ( | VALUE | klass | ) | `[static]`

Definition at line 165 of file iseq.c.

References 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 630 of file iseq.c.

References GetISeqPtr, rb_iseq_struct::name, 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 1099 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::arg_size, rb_iseq_struct::argc, rb_iseq_struct::catch_table, rb_iseq_struct::catch_table_size, cdhash_each(), iseq_catch_table_entry::cont, DECL_SYMBOL, iseq_catch_table_entry::end, exception_type2symbol(), rb_iseq_struct::filename, rb_iseq_struct::filepath, FIX2INT, GetISeqPtr, hash(), rb_iseq_struct::ic_entries, rb_global_entry::id, ID2SYM, INIT_SYMBOL, rb_iseq_struct::insn_info_table, INT2FIX, iseq_catch_table_entry::iseq, rb_iseq_struct::iseq, rb_iseq_struct::iseq_size, ISEQ_TYPE_BLOCK, ISEQ_TYPE_CLASS, ISEQ_TYPE_DEFINED_GUARD, ISEQ_TYPE_ENSURE, ISEQ_TYPE_EVAL, ISEQ_TYPE_MAIN, ISEQ_TYPE_METHOD, ISEQ_TYPE_RESCUE, ISEQ_TYPE_TOP, len, rb_iseq_struct::line_no, iseq_insn_info_entry::line_no, rb_iseq_struct::local_size, rb_iseq_struct::local_table, rb_iseq_struct::local_table_size, main(), rb_iseq_struct::name, obj_resurrect(), Qnil, RARRAY_LEN, RARRAY_PTR, rb_ary_entry(), rb_ary_new(), rb_ary_new2(), rb_ary_push(), rb_ary_store(), rb_bug(), rb_hash_aset(), rb_hash_foreach(), rb_hash_new(), rb_id2str(), rb_intern, rb_str_new2(), register_label(), iseq_catch_table_entry::sp, st_free_table, st_init_numtable, st_lookup, rb_iseq_struct::stack_max, iseq_catch_table_entry::start, top, iseq_catch_table_entry::type, rb_iseq_struct::type, and type.

Referenced by iseq_to_a().

static VALUE iseq_eval | ( | VALUE | self | ) | `[static]`

Definition at line 641 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 58 of file iseq.c.

References rb_iseq_struct::arg_opt_table, rb_iseq_struct::catch_table, rb_iseq_struct::compile_data, compile_data_free(), rb_iseq_struct::filename, rb_iseq_struct::ic_entries, rb_iseq_struct::insn_info_table, rb_iseq_struct::iseq, rb_iseq_struct::iseq_encoded, rb_iseq_struct::local_table, rb_iseq_struct::name, rb_iseq_struct::orig, 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 648 of file iseq.c.

References rb_iseq_struct::filename, GetISeqPtr, rb_iseq_struct::name, 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 439 of file iseq.c.

References CHECK_ARRAY, CHECK_INTEGER(), CHECK_STRING, CHECK_SYMBOL, cleanup_iseq_build(), FIXNUM_P, GetISeqPtr, ID2SYM, iseq_alloc(), ISEQ_TYPE_BLOCK, ISEQ_TYPE_CLASS, ISEQ_TYPE_DEFINED_GUARD, ISEQ_TYPE_ENSURE, ISEQ_TYPE_EVAL, ISEQ_TYPE_MAIN, ISEQ_TYPE_METHOD, ISEQ_TYPE_RESCUE, ISEQ_TYPE_TOP, make_compile_option(), name, NIL_P, prepare_iseq_build(), Qnil, rb_ary_entry(), rb_eTypeError, rb_id2name(), rb_intern, rb_iseq_build_from_ary(), rb_raise(), rb_iseq_struct::self, st_init_numtable, st_insert, st_lookup, and type.

Referenced by iseq_s_load(), and rb_iseq_load().

static void iseq_mark | ( | void * | ptr | ) | `[static]`

Definition at line 90 of file iseq.c.

References 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::filename, rb_iseq_struct::filepath, rb_iseq_struct::klass, iseq_compile_data::mark_ary, rb_iseq_struct::mark_ary, rb_iseq_struct::name, rb_iseq_struct::orig, RSTRING_PTR, RUBY_GC_INFO, RUBY_MARK_ENTER, RUBY_MARK_LEAVE, and RUBY_MARK_UNLESS_NULL.

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

Definition at line 122 of file iseq.c.

References rb_iseq_struct::arg_opts, rb_iseq_struct::catch_table_size, rb_iseq_struct::compile_data, rb_iseq_struct::ic_size, rb_iseq_struct::insn_info_size, rb_iseq_struct::iseq, rb_iseq_struct::iseq_encoded, rb_iseq_struct::iseq_size, rb_iseq_struct::local_table_size, iseq_compile_data_storage::next, rb_iseq_struct::orig, iseq_compile_data_storage::size, size, and iseq_compile_data::storage_head.

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

Definition at line 576 of file iseq.c.

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

Referenced by Init_ISeq().

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

Definition at line 590 of file iseq.c.

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

Referenced by Init_ISeq().

static VALUE iseq_s_compile_option_get | ( | VALUE | self | ) | `[static]`

Definition at line 624 of file iseq.c.

References make_compile_option_value().

Referenced by Init_ISeq().

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

Definition at line 614 of file iseq.c.

References make_compile_option(), and rb_secure().

Referenced by Init_ISeq().

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

Definition at line 1020 of file iseq.c.

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

Referenced by Init_ISeq().

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

Definition at line 522 of file iseq.c.

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

Referenced by Init_ISeq().

static VALUE iseq_to_a | ( | VALUE | self | ) | `[static]`

Definition at line 665 of file iseq.c.

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

Referenced by Init_ISeq().

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

Definition at line 311 of file iseq.c.

References CLASS_OF, COMPILE_OPTION_DEFAULT, COMPILE_OPTION_FALSE, 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 352 of file iseq.c.

References rb_hash_new(), SET_COMPILE_OPTION, and SET_COMPILE_OPTION_NUM.

Referenced by iseq_s_compile_option_get().

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

Definition at line 27 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(), insn_operand_intern(), and iseq_data_to_ary().

static NODE* parse_string | ( | VALUE | str,
|  | const char * | file,
|  | int | line
| ) |  | `[static]`

Definition at line 537 of file iseq.c.

References GET_THREAD, rb_exc_raise(), rb_parser_compile_string(), and rb_parser_new().

Referenced by rb_iseq_compile_with_option().

static VALUE prepare_iseq_build | ( | rb_iseq_t * | iseq,
|  | VALUE | name,
|  | VALUE | filename,
|  | VALUE | filepath,
|  | VALUE | line_no,
|  | VALUE | parent,
|  | VALUE | type,
|  | VALUE | block_opt,
|  | const rb_compile_option_t * | option
| ) |  | `[static]`

Definition at line 221 of file iseq.c.

References ALLOC, ALLOC_N, rb_iseq_struct::arg_block, rb_iseq_struct::arg_rest, 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, rb_iseq_struct::filename, rb_iseq_struct::filepath, GET_THREAD, INITIAL_ISEQ_COMPILE_DATA_STORAGE_BUFF_SIZE, rb_iseq_struct::klass, iseq_compile_data::last_coverable_line, rb_iseq_struct::line_no, iseq_compile_data::mark_ary, rb_iseq_struct::mark_ary, MEMZERO, name, rb_iseq_struct::name, iseq_compile_data_storage::next, NIL_P, OBJ_FREEZE, OBJ_UNTRUST, iseq_compile_data::option, iseq_compile_data_storage::pos, Qfalse, Qnil, Qtrue, rb_ary_new(), rb_ary_tmp_new(), rb_get_coverages(), rb_hash_lookup, rb_realpath_internal(), RBASIC, RTEST, set_relation(), iseq_compile_data_storage::size, iseq_compile_data::storage_current, iseq_compile_data::storage_head, type, and rb_iseq_struct::type.

Referenced by iseq_load(), and rb_iseq_new_with_bopt_and_opt().

VALUE rb_iseq_build_for_ruby2cext | ( | const rb_iseq_t * | iseq_template,
|  | const rb_insn_func_t * | func,
|  | const struct iseq_insn_info_entry * | insn_info_table,
|  | const char ** | local_table,
|  | const VALUE * | arg_opt_table,
|  | const struct iseq_catch_table_entry * | catch_table,
|  | const char * | name,
|  | const char * | filename,
|  | const unsigned short | line_no
| ) |  |

Definition at line 1441 of file iseq.c.

References ALLOC_AND_COPY, ALLOC_N, rb_iseq_struct::arg_opt_table, rb_iseq_struct::arg_opts, rb_iseq_struct::catch_table, rb_iseq_struct::catch_table_size, rb_iseq_struct::filename, GetISeqPtr, rb_iseq_struct::insn_info_size, rb_iseq_struct::insn_info_table, rb_iseq_struct::iseq, iseq_catch_table_entry::iseq, iseq_alloc(), rb_iseq_struct::iseq_size, rb_iseq_struct::line_no, rb_iseq_struct::mark_ary, rb_iseq_struct::name, OBJ_UNTRUST, rb_ary_tmp_new(), rb_cISeq, rb_iseq_translate_threaded_code(), rb_str_new2(), rb_iseq_struct::self, and set_relation().

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

Definition at line 570 of file iseq.c.

References Qnil, and rb_iseq_compile_with_option().

Referenced by eval_string_with_cref().

VALUE rb_iseq_compile_with_option | ( | VALUE | src,
|  | VALUE | file,
|  | VALUE | filepath,
|  | VALUE | line,
|  | VALUE | opt
| ) |  |

Definition at line 549 of file iseq.c.

References rb_thread_struct::base_block, GET_THREAD, rb_block_struct::iseq, ISEQ_TYPE_EVAL, ISEQ_TYPE_TOP, make_compile_option(), rb_iseq_struct::name, NUM2INT, parse_string(), Qfalse, rb_iseq_new_with_opt(), rb_str_new2(), rb_iseq_struct::self, StringValue, and StringValueCStr.

Referenced by iseq_s_compile(), prelude_eval(), and rb_iseq_compile().

VALUE rb_iseq_disasm | ( | VALUE | self | ) |

Definition at line 917 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, argc, rb_iseq_struct::argc, rb_iseq_struct::catch_table, rb_iseq_struct::catch_table_size, catch_type(), iseq_catch_table_entry::cont, iseq_catch_table_entry::end, iseq_catch_table_entry::iseq, rb_iseq_struct::iseq, iseq_check(), iseq_inspect(), rb_iseq_struct::iseq_size, rb_iseq_struct::local_size, rb_iseq_struct::local_table, rb_iseq_struct::local_table_size, name, RARRAY_LEN, rb_ary_entry(), rb_ary_new(), rb_id2name(), rb_iseq_disasm(), rb_iseq_disasm_insn(), 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, snprintf, iseq_catch_table_entry::sp, iseq_catch_table_entry::start, and iseq_catch_table_entry::type.

Referenced by eval_string_with_cref(), Init_ISeq(), iseq_s_disasm(), iseq_setup(), process_options(), 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 835 of file iseq.c.

References find_line_no(), find_prev_line_no(), get_insn_info(), insn_operand_intern(), len, iseq_insn_info_entry::line_no, PRIdSIZE, rb_str_cat2(), rb_str_catf(), rb_str_concat(), rb_str_new(), RSTRING_LEN, RSTRING_PTR, and iseq_insn_info_entry::sp.

Referenced by rb_iseq_disasm(), and rb_vmdebug_debug_print_pre().

int rb_iseq_first_lineno | ( | rb_iseq_t * | iseq | ) |

Definition at line 673 of file iseq.c.

References FIX2INT, and rb_iseq_struct::line_no.

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

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

Definition at line 531 of file iseq.c.

References iseq_load(), and rb_cISeq.

Referenced by iseq_build_body(), and iseq_build_exception().

VALUE rb_iseq_new | ( | NODE * | node,
|  | VALUE | name,
|  | VALUE | filename,
|  | VALUE | filepath,
|  | VALUE | parent,
|  | VALUE | type
| ) |  |

Definition at line 375 of file iseq.c.

References INT2FIX, and rb_iseq_new_with_opt().

Referenced by Init_VM(), and rb_vm_call_cfunc().

VALUE rb_iseq_new_main | ( | NODE * | node,
|  | VALUE | filename,
|  | VALUE | filepath
| ) |  |

Definition at line 390 of file iseq.c.

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

Referenced by process_options().

VALUE rb_iseq_new_top | ( | NODE * | node,
|  | VALUE | name,
|  | VALUE | filename,
|  | VALUE | filepath,
|  | VALUE | parent
| ) |  |

Definition at line 383 of file iseq.c.

References INT2FIX, ISEQ_TYPE_TOP, and rb_iseq_new_with_opt().

Referenced by rb_load_internal().

VALUE rb_iseq_new_with_bopt | ( | NODE * | node,
|  | VALUE | name,
|  | VALUE | filename,
|  | VALUE | filepath,
|  | VALUE | line_no,
|  | VALUE | parent,
|  | VALUE | type,
|  | VALUE | bopt
| ) |  |

Definition at line 426 of file iseq.c.

References rb_iseq_new_with_bopt_and_opt().

static VALUE rb_iseq_new_with_bopt_and_opt | ( | NODE * | node,
|  | VALUE | name,
|  | VALUE | filename,
|  | VALUE | filepath,
|  | VALUE | line_no,
|  | VALUE | parent,
|  | VALUE | type,
|  | VALUE | bopt,
|  | const rb_compile_option_t * | option
| ) |  | `[static]`

Definition at line 399 of file iseq.c.

References cleanup_iseq_build(), GetISeqPtr, iseq_alloc(), prepare_iseq_build(), rb_cISeq, rb_iseq_compile_node(), and rb_iseq_struct::self.

Referenced by rb_iseq_new_with_bopt(), and rb_iseq_new_with_opt().

VALUE rb_iseq_new_with_opt | ( | NODE * | node,
|  | VALUE | name,
|  | VALUE | filename,
|  | VALUE | filepath,
|  | VALUE | line_no,
|  | VALUE | parent,
|  | VALUE | type,
|  | const rb_compile_option_t * | option
| ) |  |

Definition at line 416 of file iseq.c.

References 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 1376 of file iseq.c.

References rb_iseq_struct::arg_block, rb_iseq_struct::arg_post_len, rb_iseq_struct::arg_post_start, rb_iseq_struct::arg_rest, rb_iseq_struct::arg_size, rb_iseq_struct::argc, CONST_ID, ID2SYM, PARAM, PARAM_ID, PARAM_TYPE, Qnil, rb_ary_new2(), rb_ary_push(), and rb_id2name().

Referenced by rb_method_parameters(), and rb_proc_parameters().

VALUE rb_realpath_internal | ( | VALUE | basedir,
|  | VALUE | path,
|  | int | strict
| ) |  |

Definition at line 3307 of file file.c.

References CharNext, chompdirsep(), FilePathValue, NIL_P, NULL, OBJ_TAINT, Qnil, rb_dir_getwd(), rb_enc_get(), rb_enc_str_new(), rb_hash_new(), rb_secure(), rb_str_dup_frozen(), rb_str_set_len, realpath_rec(), RSTRING_LEN, RSTRING_PTR, and skipprefixroot().

Referenced by prepare_iseq_build(), rb_file_s_realdirpath(), and rb_file_s_realpath().

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

Definition at line 1062 of file iseq.c.

References CHAR_BIT, ID2SYM, rb_intern, snprintf, and st_insert.

Referenced by iseq_data_to_ary().

const char* ruby_node_name | ( | int | node | ) |

Definition at line 1045 of file iseq.c.

References rb_bug().

Referenced by compile_array_(), 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 172 of file iseq.c.

References rb_iseq_struct::cref_stack, GET_THREAD, GetISeqPtr, ISEQ_TYPE_CLASS, ISEQ_TYPE_METHOD, ISEQ_TYPE_TOP, rb_iseq_struct::local_iseq, RNode::nd_file, NEW_BLOCK, NOEX_PRIVATE, rb_iseq_struct::parent_iseq, rb_cObject, RTEST, rb_thread_struct::top_wrapper, rb_iseq_struct::type, and type.

Referenced by prepare_iseq_build(), and rb_iseq_build_for_ruby2cext().

## Variable Documentation

rb_compile_option_t COMPILE_OPTION_DEFAULT`[static]`

Initial value:

     {
        OPT_INLINE_CONST_CACHE,
        OPT_PEEPHOLE_OPTIMIZATION,
        OPT_TAILCALL_OPTIMIZATION,
        OPT_SPECIALISED_INSTRUCTION,
        OPT_OPERANDS_UNIFICATION,
        OPT_INSTRUCTIONS_UNIFICATION,
        OPT_STACK_CACHING,
        OPT_TRACE_INSTRUCTION,
    }

Definition at line 298 of file iseq.c.

Referenced by make_compile_option().

const rb_compile_option_t COMPILE_OPTION_FALSE = {0}`[static]`

Definition at line 308 of file iseq.c.

Referenced by make_compile_option().

const rb_data_type_t iseq_data_type`[static]`

Initial value:

     {
        "iseq",
        iseq_mark,
        iseq_free,
        iseq_memsize,
    }

Definition at line 157 of file iseq.c.

VALUE rb_cISeq

Definition at line 22 of file iseq.c.

Referenced by Init_ISeq(), insn_operand_intern(), iseq_build_body(), rb_iseq_build_for_ruby2cext(), rb_iseq_clone(), rb_iseq_load(), and rb_iseq_new_with_bopt_and_opt().