compile.c File Reference

#include "ruby/ruby.h"
#include "internal.h"
#include <math.h>
#include "vm_core.h"
#include "iseq.h"
#include "insns.inc"
#include "insns_info.inc"
#include "optinsn.inc"

Go to the source code of this file.

Data Structures

struct  iseq_link_element
struct  iseq_link_anchor
struct  iseq_label_data
struct  iseq_insn_data
struct  iseq_adjust_data
struct  ensure_range
struct  iseq_compile_data_ensure_node_stack
struct  cdhash_set_label_struct

Defines

#define USE_INSN_STACK_INCREASE   1
#define FIXNUM_INC(n, i)   ((n)+(INT2FIX(i)&~FIXNUM_FLAG))
#define FIXNUM_OR(n, i)   ((n)|INT2FIX(i))
#define CPDEBUG   0
 debug function(macro) interface depend on CPDEBUG if it is less than 0, runtime option is in effect.
#define compile_debug   CPDEBUG
#define debugi(header, id)   r_id(id)
#define debugp(header, value)   r_value(value)
#define debugp_verbose(header, value)   r_value(value)
#define debugp_verbose_node(header, value)   r_value(value)
#define debugp_param(header, value)   r_value(value)
#define debug_node_start(node)   ((void)0)
#define debug_node_end()   ((void)0)
#define debugs   if(0)printf
#define debug_compile(msg, v)   (v)
#define NEW_LABEL(l)   new_label_body(iseq, (l))
#define iseq_path(iseq)   (((rb_iseq_t*)DATA_PTR(iseq))->location.path)
#define iseq_absolute_path(iseq)   (((rb_iseq_t*)DATA_PTR(iseq))->location.absolute_path)
#define NEW_ISEQVAL(node, name, type, line_no)   new_child_iseq(iseq, (node), rb_fstring(name), 0, (type), (line_no))
#define NEW_CHILD_ISEQVAL(node, name, type, line_no)   new_child_iseq(iseq, (node), rb_fstring(name), iseq->self, (type), (line_no))
#define ADD_SEQ(seq1, seq2)   APPEND_LIST((seq1), (seq2))
#define ADD_INSN(seq, line, insn)   ADD_ELEM((seq), (LINK_ELEMENT *) new_insn_body(iseq, (line), BIN(insn), 0))
#define ADD_INSN1(seq, line, insn, op1)
#define ADD_INSNL(seq, line, insn, label)   ADD_INSN1(seq, line, insn, label)
#define ADD_INSN2(seq, line, insn, op1, op2)
#define ADD_INSN3(seq, line, insn, op1, op2, op3)
#define ADD_SEND(seq, line, id, argc)   ADD_SEND_R((seq), (line), (id), (argc), (VALUE)Qfalse, (VALUE)INT2FIX(0))
#define ADD_CALL_RECEIVER(seq, line)   ADD_INSN((seq), (line), putself)
#define ADD_CALL(seq, line, id, argc)   ADD_SEND_R((seq), (line), (id), (argc), (VALUE)Qfalse, (VALUE)INT2FIX(VM_CALL_FCALL))
#define ADD_CALL_WITH_BLOCK(seq, line, id, argc, block)   ADD_SEND_R((seq), (line), (id), (argc), (block), (VALUE)INT2FIX(VM_CALL_FCALL))
#define ADD_SEND_R(seq, line, id, argc, block, flag)
#define ADD_TRACE(seq, line, event)
#define ADD_LABEL(seq, label)   ADD_ELEM((seq), (LINK_ELEMENT *) (label))
#define APPEND_LABEL(seq, before, label)   APPEND_ELEM((seq), (before), (LINK_ELEMENT *) (label))
#define ADD_ADJUST(seq, line, label)   ADD_ELEM((seq), (LINK_ELEMENT *) new_adjust_body(iseq, (label), (line)))
#define ADD_ADJUST_RESTORE(seq, label)   ADD_ELEM((seq), (LINK_ELEMENT *) new_adjust_body(iseq, (label), -1))
#define ADD_CATCH_ENTRY(type, ls, le, iseqv, lc)
#define COMPILE(anchor, desc, node)
#define COMPILE_POPED(anchor, desc, node)
#define COMPILE_(anchor, desc, node, poped)
#define OPERAND_AT(insn, idx)   (((INSN*)(insn))->operands[(idx)])
#define INSN_OF(insn)   (((INSN*)(insn))->insn_id)
#define COMPILE_ERROR(strs)
#define ERROR_ARGS   ruby_sourcefile, nd_line(node),
#define COMPILE_OK   1
#define COMPILE_NG   0
#define DECL_ANCHOR(name)   LINK_ANCHOR *name, name##_body__ = {{0,},}
#define INIT_ANCHOR(name)   (name##_body__.last = &name##_body__.anchor, name = &name##_body__)
#define hide_obj(obj)   do {OBJ_FREEZE(obj); RBASIC_CLEAR_CLASS(obj);} while (0)
#define ISEQ_ARG
#define ISEQ_ARG_DECLARE
#define ruby_sourcefile   RSTRING_PTR(iseq->location.path)
#define PADDING_SIZE_MAX   0
#define SP_INSN(opt)   insn_set_specialized_instruction(iseq, iobj, BIN(opt_##opt))
#define MEMORY(v)
#define defined_expr   defined_expr0
#define BUFSIZE   0x100
#define rb_intern(str)   rb_intern_const(str)
#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")

Typedefs

typedef iseq_link_element LINK_ELEMENT
typedef iseq_link_anchor LINK_ANCHOR
typedef iseq_label_data LABEL
typedef iseq_insn_data INSN
typedef iseq_adjust_data ADJUST

Enumerations

enum  compile_array_type_t { COMPILE_ARRAY_TYPE_ARRAY, COMPILE_ARRAY_TYPE_HASH, COMPILE_ARRAY_TYPE_ARGS }

Functions

static ID r_id (ID id)
static VALUE r_value (VALUE value)
static void dump_disasm_list (LINK_ELEMENT *elem)
static int insn_data_length (INSN *iobj)
static int calc_sp_depth (int depth, INSN *iobj)
static INSNnew_insn_body (rb_iseq_t *iseq, int line_no, int insn_id, int argc,...)
static LABELnew_label_body (rb_iseq_t *iseq, long line)
static ADJUSTnew_adjust_body (rb_iseq_t *iseq, LABEL *label, int line)
static int iseq_compile_each (rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *node, int poped)
 compile each node
static int iseq_setup (rb_iseq_t *iseq, LINK_ANCHOR *anchor)
static int iseq_optimize (rb_iseq_t *iseq, LINK_ANCHOR *anchor)
static int iseq_insns_unification (rb_iseq_t *iseq, LINK_ANCHOR *anchor)
static int iseq_set_local_table (rb_iseq_t *iseq, ID *tbl)
static int iseq_set_exception_local_table (rb_iseq_t *iseq)
static int iseq_set_arguments (rb_iseq_t *iseq, LINK_ANCHOR *anchor, NODE *node)
static int iseq_set_sequence_stackcaching (rb_iseq_t *iseq, LINK_ANCHOR *anchor)
static int iseq_set_sequence (rb_iseq_t *iseq, LINK_ANCHOR *anchor)
 ruby insn object list -> raw instruction sequence
static int iseq_set_exception_table (rb_iseq_t *iseq)
static int iseq_set_optargs_table (rb_iseq_t *iseq)
static void verify_list (ISEQ_ARG_DECLARE const char *info, LINK_ANCHOR *anchor)
static void ADD_ELEM (ISEQ_ARG_DECLARE LINK_ANCHOR *anchor, LINK_ELEMENT *elem)
static void APPEND_ELEM (ISEQ_ARG_DECLARE LINK_ANCHOR *anchor, LINK_ELEMENT *before, LINK_ELEMENT *elem)
static int iseq_add_mark_object (rb_iseq_t *iseq, VALUE v)
static int iseq_add_mark_object_compile_time (rb_iseq_t *iseq, VALUE v)
static int validate_label (st_data_t name, st_data_t label, st_data_t arg)
static void validate_labels (rb_iseq_t *iseq, st_table *labels_table)
VALUE rb_iseq_compile_node (VALUE self, NODE *node)
int rb_iseq_translate_threaded_code (rb_iseq_t *iseq)
static void * compile_data_alloc (rb_iseq_t *iseq, size_t size)
static INSNcompile_data_alloc_insn (rb_iseq_t *iseq)
static LABELcompile_data_alloc_label (rb_iseq_t *iseq)
static ADJUSTcompile_data_alloc_adjust (rb_iseq_t *iseq)
static void INSERT_ELEM_NEXT (LINK_ELEMENT *elem1, LINK_ELEMENT *elem2)
static void REPLACE_ELEM (LINK_ELEMENT *elem1, LINK_ELEMENT *elem2)
static void REMOVE_ELEM (LINK_ELEMENT *elem)
static LINK_ELEMENTFIRST_ELEMENT (LINK_ANCHOR *anchor)
static LINK_ELEMENTPOP_ELEMENT (ISEQ_ARG_DECLARE LINK_ANCHOR *anchor)
static int LIST_SIZE_ZERO (LINK_ANCHOR *anchor)
static void APPEND_LIST (ISEQ_ARG_DECLARE LINK_ANCHOR *anc1, LINK_ANCHOR *anc2)
static void INSERT_LIST (ISEQ_ARG_DECLARE LINK_ANCHOR *anc1, LINK_ANCHOR *anc2)
static INSNnew_insn_core (rb_iseq_t *iseq, int line_no, int insn_id, int argc, VALUE *argv)
static rb_call_info_tnew_callinfo (rb_iseq_t *iseq, ID mid, int argc, VALUE block, unsigned long flag)
static INSNnew_insn_send (rb_iseq_t *iseq, int line_no, VALUE id, VALUE argc, VALUE block, VALUE flag)
static VALUE new_child_iseq (rb_iseq_t *iseq, NODE *node, VALUE name, VALUE parent, enum iseq_type type, int line_no)
static int get_lvar_level (rb_iseq_t *iseq)
static int get_dyna_var_idx_at_raw (rb_iseq_t *iseq, ID id)
static int get_local_var_idx (rb_iseq_t *iseq, ID id)
static int get_dyna_var_idx (rb_iseq_t *iseq, ID id, int *level, int *ls)
static int cdhash_cmp (VALUE val, VALUE lit)
static st_index_t cdhash_hash (VALUE a)
static int cdhash_set_label_i (VALUE key, VALUE val, void *ptr)
static int label_get_position (LABEL *lobj)
static int label_get_sp (LABEL *lobj)
static LINK_ELEMENTget_destination_insn (INSN *iobj)
static LINK_ELEMENTget_next_insn (INSN *iobj)
static LINK_ELEMENTget_prev_insn (INSN *iobj)
static int iseq_peephole_optimize (rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcallopt)
static int insn_set_specialized_instruction (rb_iseq_t *iseq, INSN *iobj, int insn_id)
static int iseq_specialized_instruction (rb_iseq_t *iseq, INSN *iobj)
static int compile_dstr_fragments (rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *node, int *cntp)
static int compile_dstr (rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *node)
static int compile_dregx (rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *node)
static int compile_branch_condition (rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *cond, LABEL *then_label, LABEL *else_label)
static int compile_array_ (rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *node_root, enum compile_array_type_t type, int poped)
static VALUE compile_array (rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *node_root, enum compile_array_type_t type)
static VALUE case_when_optimizable_literal (NODE *node)
static int when_vals (rb_iseq_t *iseq, LINK_ANCHOR *cond_seq, NODE *vals, LABEL *l1, int only_special_literals, VALUE literals)
static int compile_massign_lhs (rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *node)
static void compile_massign_opt_lhs (rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *lhsn)
static int compile_massign_opt (rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *rhsn, NODE *orig_lhsn)
static int compile_massign (rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *node, int poped)
static int compile_colon2 (rb_iseq_t *iseq, NODE *node, LINK_ANCHOR *pref, LINK_ANCHOR *body)
static VALUE compile_cpath (LINK_ANCHOR *ret, rb_iseq_t *iseq, NODE *cpath)
static int defined_expr (rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *node, LABEL **lfinish, VALUE needstr)
static VALUE make_name_for_block (rb_iseq_t *iseq)
static void push_ensure_entry (rb_iseq_t *iseq, struct iseq_compile_data_ensure_node_stack *enl, struct ensure_range *er, NODE *node)
static void add_ensure_range (rb_iseq_t *iseq, struct ensure_range *erange, LABEL *lstart, LABEL *lend)
static void add_ensure_iseq (LINK_ANCHOR *ret, rb_iseq_t *iseq, int is_return)
static VALUE setup_args (rb_iseq_t *iseq, LINK_ANCHOR *args, NODE *argn, VALUE *flag)
static VALUE build_postexe_iseq (rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *body)
static VALUE opobj_inspect (VALUE obj)
static VALUE insn_data_to_s_detail (INSN *iobj)
const char * rb_insns_name (int i)
VALUE rb_insns_name_array (void)
static LABELregister_label (rb_iseq_t *iseq, struct st_table *labels_table, VALUE obj)
static VALUE get_exception_sym2type (VALUE sym)
static int iseq_build_from_ary_exception (rb_iseq_t *iseq, struct st_table *labels_table, VALUE exception)
static struct st_tableinsn_make_insn_table (void)
static VALUE iseq_build_load_iseq (rb_iseq_t *iseq, VALUE op)
static int iseq_build_from_ary_body (rb_iseq_t *iseq, LINK_ANCHOR *anchor, VALUE body, struct st_table *labels_table)
static VALUE CHECK_INTEGER (VALUE v)
VALUE rb_iseq_build_from_ary (rb_iseq_t *iseq, VALUE locals, VALUE args, VALUE exception, VALUE body)
int rb_dvar_defined (ID id)
int rb_local_defined (ID id)
int rb_parse_in_eval (void)
int rb_parse_in_main (void)

Variables

static struct st_hash_type cdhash_type


Define Documentation

#define ADD_ADJUST ( seq,
line,
label   )     ADD_ELEM((seq), (LINK_ELEMENT *) new_adjust_body(iseq, (label), (line)))

Definition at line 241 of file compile.c.

Referenced by iseq_compile_each().

#define ADD_ADJUST_RESTORE ( seq,
label   )     ADD_ELEM((seq), (LINK_ELEMENT *) new_adjust_body(iseq, (label), -1))

Definition at line 244 of file compile.c.

Referenced by iseq_compile_each().

#define ADD_CALL ( seq,
line,
id,
argc   )     ADD_SEND_R((seq), (line), (id), (argc), (VALUE)Qfalse, (VALUE)INT2FIX(VM_CALL_FCALL))

Definition at line 210 of file compile.c.

Referenced by iseq_compile_each().

#define ADD_CALL_RECEIVER ( seq,
line   )     ADD_INSN((seq), (line), putself)

Definition at line 207 of file compile.c.

Referenced by iseq_compile_each().

#define ADD_CALL_WITH_BLOCK ( seq,
line,
id,
argc,
block   )     ADD_SEND_R((seq), (line), (id), (argc), (block), (VALUE)INT2FIX(VM_CALL_FCALL))

Definition at line 213 of file compile.c.

Referenced by build_postexe_iseq().

#define ADD_CATCH_ENTRY ( type,
ls,
le,
iseqv,
lc   ) 

Value:

(rb_ary_push(iseq->compile_data->catch_table_ary,               \
                 rb_ary_new3(5, (type),                         \
                             (VALUE)(ls) | 1, (VALUE)(le) | 1,  \
                             (VALUE)(iseqv), (VALUE)(lc) | 1)))

Definition at line 247 of file compile.c.

Referenced by iseq_build_from_ary_exception(), iseq_compile_each(), and rb_iseq_compile_node().

#define ADD_INSN ( seq,
line,
insn   )     ADD_ELEM((seq), (LINK_ELEMENT *) new_insn_body(iseq, (line), BIN(insn), 0))

Definition at line 184 of file compile.c.

Referenced by compile_array_(), compile_colon2(), compile_massign(), compile_massign_lhs(), compile_massign_opt(), defined_expr(), iseq_compile_each(), iseq_set_arguments(), rb_iseq_compile_node(), setup_args(), and when_vals().

#define ADD_INSN1 ( seq,
line,
insn,
op1   ) 

Value:

ADD_ELEM((seq), (LINK_ELEMENT *) \
           new_insn_body(iseq, (line), BIN(insn), 1, (VALUE)(op1)))

Definition at line 188 of file compile.c.

Referenced by build_postexe_iseq(), compile_array_(), compile_colon2(), compile_cpath(), compile_dstr(), compile_dstr_fragments(), compile_massign_lhs(), defined_expr(), iseq_compile_each(), rb_iseq_compile_node(), setup_args(), and when_vals().

#define ADD_INSN2 ( seq,
line,
insn,
op1,
op2   ) 

Value:

ADD_ELEM((seq), (LINK_ELEMENT *) \
           new_insn_body(iseq, (line), BIN(insn), 2, (VALUE)(op1), (VALUE)(op2)))

Definition at line 195 of file compile.c.

Referenced by compile_dregx(), compile_massign(), iseq_compile_each(), and rb_iseq_compile_node().

#define ADD_INSN3 ( seq,
line,
insn,
op1,
op2,
op3   ) 

Value:

ADD_ELEM((seq), (LINK_ELEMENT *) \
           new_insn_body(iseq, (line), BIN(insn), 3, (VALUE)(op1), (VALUE)(op2), (VALUE)(op3)))

Definition at line 199 of file compile.c.

Referenced by defined_expr(), and iseq_compile_each().

#define ADD_INSNL ( seq,
line,
insn,
label   )     ADD_INSN1(seq, line, insn, label)

Definition at line 193 of file compile.c.

Referenced by compile_branch_condition(), defined_expr(), iseq_compile_each(), and when_vals().

#define ADD_LABEL ( seq,
label   )     ADD_ELEM((seq), (LINK_ELEMENT *) (label))

Definition at line 235 of file compile.c.

Referenced by add_ensure_iseq(), compile_branch_condition(), iseq_build_from_ary_body(), iseq_compile_each(), iseq_set_arguments(), and rb_iseq_compile_node().

#define ADD_SEND ( seq,
line,
id,
argc   )     ADD_SEND_R((seq), (line), (id), (argc), (VALUE)Qfalse, (VALUE)INT2FIX(0))

Definition at line 204 of file compile.c.

Referenced by compile_array_(), and iseq_compile_each().

#define ADD_SEND_R ( seq,
line,
id,
argc,
block,
flag   ) 

Value:

ADD_ELEM((seq), (LINK_ELEMENT *) \
           new_insn_send(iseq, (line), \
                         (VALUE)(id), (VALUE)(argc), (VALUE)(block), (VALUE)(flag)))

Definition at line 216 of file compile.c.

Referenced by iseq_compile_each().

#define ADD_SEQ ( seq1,
seq2   )     APPEND_LIST((seq1), (seq2))

Definition at line 180 of file compile.c.

Referenced by add_ensure_iseq(), compile_massign(), compile_massign_lhs(), iseq_compile_each(), and setup_args().

#define ADD_TRACE ( seq,
line,
event   ) 

Value:

do { \
      if ((event) == RUBY_EVENT_LINE && iseq->coverage && \
          (line) != iseq->compile_data->last_coverable_line) { \
          RARRAY_ASET(iseq->coverage, (line) - 1, INT2FIX(0)); \
          iseq->compile_data->last_coverable_line = (line); \
          ADD_INSN1((seq), (line), trace, INT2FIX(RUBY_EVENT_COVERAGE)); \
      } \
      if (iseq->compile_data->option->trace_instruction) { \
          ADD_INSN1((seq), (line), trace, INT2FIX(event)); \
      } \
  } while (0)

Definition at line 221 of file compile.c.

Referenced by iseq_compile_each(), and rb_iseq_compile_node().

#define APPEND_LABEL ( seq,
before,
label   )     APPEND_ELEM((seq), (before), (LINK_ELEMENT *) (label))

Definition at line 238 of file compile.c.

#define BUFSIZE   0x100

Definition at line 3060 of file compile.c.

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

Definition at line 5879 of file compile.c.

Referenced by iseq_load(), and rb_iseq_build_from_ary().

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

Definition at line 5880 of file compile.c.

Referenced by iseq_load().

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

Definition at line 5881 of file compile.c.

Referenced by iseq_load(), and rb_iseq_build_from_ary().

#define COMPILE ( anchor,
desc,
node   ) 

Value:

(debug_compile("== " desc "\n", \
                 iseq_compile_each(iseq, (anchor), (node), 0)))

Definition at line 254 of file compile.c.

Referenced by compile_array_(), compile_branch_condition(), compile_colon2(), compile_cpath(), compile_dstr_fragments(), compile_massign(), compile_massign_opt(), defined_expr(), iseq_compile_each(), iseq_set_arguments(), rb_iseq_compile_node(), setup_args(), and when_vals().

#define COMPILE_ ( anchor,
desc,
node,
poped   ) 

Value:

(debug_compile("== " desc "\n", \
                 iseq_compile_each(iseq, (anchor), (node), (poped))))

Definition at line 264 of file compile.c.

Referenced by compile_array_(), and iseq_compile_each().

#define compile_debug   CPDEBUG

Definition at line 95 of file compile.c.

Referenced by iseq_setup(), and verify_list().

#define COMPILE_ERROR ( strs   ) 

Value:

{                                                  \
  VALUE tmp = GET_THREAD()->errinfo;               \
  if (compile_debug) rb_compile_bug strs;          \
  GET_THREAD()->errinfo = iseq->compile_data->err_info;  \
  rb_compile_error strs;                           \
  RB_OBJ_WRITE(iseq->self, &iseq->compile_data->err_info, GET_THREAD()->errinfo); \
  GET_THREAD()->errinfo = tmp;                     \
  ret = 0;                                         \
  break;                                           \
}

Definition at line 275 of file compile.c.

Referenced by iseq_compile_each(), and validate_label().

#define COMPILE_NG   0

Definition at line 291 of file compile.c.

Referenced by iseq_compile_each().

#define COMPILE_OK   1

Definition at line 290 of file compile.c.

Referenced by compile_branch_condition(), compile_colon2(), compile_dregx(), compile_dstr(), compile_dstr_fragments(), compile_massign(), compile_massign_lhs(), insn_set_specialized_instruction(), iseq_add_mark_object(), iseq_add_mark_object_compile_time(), iseq_build_from_ary_body(), iseq_build_from_ary_exception(), iseq_compile_each(), iseq_optimize(), iseq_peephole_optimize(), iseq_set_arguments(), iseq_set_exception_local_table(), iseq_set_exception_table(), iseq_set_local_table(), iseq_set_optargs_table(), iseq_set_sequence_stackcaching(), iseq_specialized_instruction(), and rb_iseq_translate_threaded_code().

#define COMPILE_POPED ( anchor,
desc,
node   ) 

Value:

(debug_compile("== " desc "\n", \
                 iseq_compile_each(iseq, (anchor), (node), 1)))

Definition at line 259 of file compile.c.

Referenced by add_ensure_iseq(), compile_massign_lhs(), compile_massign_opt(), iseq_compile_each(), iseq_set_arguments(), and rb_iseq_compile_node().

#define CPDEBUG   0

debug function(macro) interface depend on CPDEBUG if it is less than 0, runtime option is in effect.

debug level: 0: no debug output 1: show node type 2: show node important parameters ... 5: show other parameters 10: show every AST array

Definition at line 91 of file compile.c.

Referenced by compile_array_().

#define debug_compile ( msg,
 )     (v)

Definition at line 160 of file compile.c.

 
#define debug_node_end (  )     ((void)0)

Definition at line 152 of file compile.c.

#define debug_node_start ( node   )     ((void)0)

Definition at line 151 of file compile.c.

Referenced by iseq_compile_each().

#define debugi ( header,
id   )     r_id(id)

Definition at line 146 of file compile.c.

Referenced by compile_colon2().

#define debugp ( header,
value   )     r_value(value)

Definition at line 147 of file compile.c.

#define debugp_param ( header,
value   )     r_value(value)

Definition at line 150 of file compile.c.

Referenced by compile_dstr_fragments(), iseq_compile_each(), and when_vals().

#define debugp_verbose ( header,
value   )     r_value(value)

Definition at line 148 of file compile.c.

#define debugp_verbose_node ( header,
value   )     r_value(value)

Definition at line 149 of file compile.c.

#define debugs   if(0)printf

Definition at line 159 of file compile.c.

Referenced by iseq_compile_each(), iseq_set_arguments(), iseq_set_local_table(), iseq_setup(), and new_child_iseq().

#define DECL_ANCHOR ( name   )     LINK_ANCHOR *name, name##_body__ = {{0,},}

Definition at line 296 of file compile.c.

Referenced by add_ensure_iseq(), compile_array_(), compile_massign(), compile_massign_lhs(), iseq_compile_each(), rb_iseq_build_from_ary(), rb_iseq_compile_node(), and setup_args().

#define defined_expr   defined_expr0

Definition at line 2850 of file compile.c.

Referenced by defined_expr(), and iseq_compile_each().

#define ERROR_ARGS   ruby_sourcefile, nd_line(node),

Definition at line 287 of file compile.c.

Referenced by iseq_compile_each(), and rb_iseq_compile_node().

#define FIXNUM_INC ( n,
 )     ((n)+(INT2FIX(i)&~FIXNUM_FLAG))

Definition at line 22 of file compile.c.

Referenced by iseq_compile_each().

#define FIXNUM_OR ( n,
 )     ((n)|INT2FIX(i))

Definition at line 23 of file compile.c.

#define hide_obj ( obj   )     do {OBJ_FREEZE(obj); RBASIC_CLEAR_CLASS(obj);} while (0)

Definition at line 301 of file compile.c.

Referenced by check_exec_env_i(), check_exec_redirect(), check_exec_redirect1(), iseq_set_sequence(), rb_check_exec_env(), rb_execarg_addopt(), rb_execarg_fixup(), rb_execarg_new(), rb_execarg_run_options(), save_env(), save_env_i(), and save_redirect_fd().

#define INIT_ANCHOR ( name   )     (name##_body__.last = &name##_body__.anchor, name = &name##_body__)

Definition at line 298 of file compile.c.

Referenced by add_ensure_iseq(), compile_array_(), compile_massign(), compile_massign_lhs(), iseq_compile_each(), rb_iseq_build_from_ary(), rb_iseq_compile_node(), and setup_args().

#define INSN_OF ( insn   )     (((INSN*)(insn))->insn_id)

Definition at line 271 of file compile.c.

#define iseq_absolute_path ( iseq   )     (((rb_iseq_t*)DATA_PTR(iseq))->location.absolute_path)

Definition at line 170 of file compile.c.

Referenced by new_child_iseq().

#define ISEQ_ARG

Definition at line 313 of file compile.c.

#define ISEQ_ARG_DECLARE

Definition at line 314 of file compile.c.

#define iseq_path ( iseq   )     (((rb_iseq_t*)DATA_PTR(iseq))->location.path)

Definition at line 167 of file compile.c.

Referenced by new_child_iseq().

#define MEMORY (  ) 

Value:

{ \
    int i; \
    if (memindex == memsize) return 0; \
    for (i=0; i<memindex; i++) { \
        if (mem[i] == (v)) return 0; \
    } \
    mem[memindex++] = (v); \
}

Referenced by compile_massign_opt().

#define NEW_CHILD_ISEQVAL ( node,
name,
type,
line_no   )     new_child_iseq(iseq, (node), rb_fstring(name), iseq->self, (type), (line_no))

Definition at line 176 of file compile.c.

Referenced by build_postexe_iseq(), and iseq_compile_each().

#define NEW_ISEQVAL ( node,
name,
type,
line_no   )     new_child_iseq(iseq, (node), rb_fstring(name), 0, (type), (line_no))

Definition at line 173 of file compile.c.

#define NEW_LABEL (  )     new_label_body(iseq, (l))

Definition at line 165 of file compile.c.

Referenced by add_ensure_iseq(), compile_branch_condition(), defined_expr(), iseq_compile_each(), iseq_set_arguments(), rb_iseq_compile_node(), and register_label().

#define OPERAND_AT ( insn,
idx   )     (((INSN*)(insn))->operands[(idx)])

Definition at line 268 of file compile.c.

Referenced by get_destination_insn(), insn_data_to_s_detail(), iseq_peephole_optimize(), and iseq_specialized_instruction().

#define PADDING_SIZE_MAX   0

Definition at line 606 of file compile.c.

Referenced by compile_data_alloc().

#define rb_intern ( str   )     rb_intern_const(str)

#define ruby_sourcefile   RSTRING_PTR(iseq->location.path)

Definition at line 422 of file compile.c.

Referenced by e_option_supplied(), parser_nextc(), parser_set_encode(), parser_set_token_info(), parser_warn(), parser_warning(), reg_compile_gen(), token_info_pop(), validate_label(), warn_unused_var(), and yycompile().

#define SP_INSN ( opt   )     insn_set_specialized_instruction(iseq, iobj, BIN(opt_##opt))

Referenced by iseq_specialized_instruction().

#define USE_INSN_STACK_INCREASE   1

Definition at line 16 of file compile.c.


Typedef Documentation

typedef struct iseq_adjust_data ADJUST

typedef struct iseq_insn_data INSN

typedef struct iseq_label_data LABEL

typedef struct iseq_link_anchor LINK_ANCHOR

typedef struct iseq_link_element LINK_ELEMENT


Enumeration Type Documentation

enum compile_array_type_t

Enumerator:
COMPILE_ARRAY_TYPE_ARRAY 
COMPILE_ARRAY_TYPE_HASH 
COMPILE_ARRAY_TYPE_ARGS 

Definition at line 2408 of file compile.c.


Function Documentation

static void ADD_ELEM ( ISEQ_ARG_DECLARE LINK_ANCHOR anchor,
LINK_ELEMENT elem 
) [static]

Definition at line 387 of file compile.c.

References iseq_link_element::next, iseq_link_element::prev, and verify_list().

Referenced by compile_massign_lhs(), and iseq_build_from_ary_body().

static void add_ensure_iseq ( LINK_ANCHOR ret,
rb_iseq_t iseq,
int  is_return 
) [static]

Definition at line 3115 of file compile.c.

References add_ensure_range(), ADD_LABEL, ADD_SEQ, rb_iseq_struct::compile_data, COMPILE_POPED, DECL_ANCHOR, iseq_compile_data_ensure_node_stack::ensure_node, iseq_compile_data::ensure_node_stack, iseq_compile_data_ensure_node_stack::erange, INIT_ANCHOR, NEW_LABEL, and iseq_compile_data_ensure_node_stack::prev.

Referenced by iseq_compile_each().

static void add_ensure_range ( rb_iseq_t iseq,
struct ensure_range erange,
LABEL lstart,
LABEL lend 
) [static]

Definition at line 3097 of file compile.c.

References compile_data_alloc(), ensure_range::end, ne, and ensure_range::next.

Referenced by add_ensure_iseq().

static void APPEND_ELEM ( ISEQ_ARG_DECLARE LINK_ANCHOR anchor,
LINK_ELEMENT before,
LINK_ELEMENT elem 
) [static]

Definition at line 399 of file compile.c.

References iseq_link_element::next, iseq_link_element::prev, and verify_list().

static void APPEND_LIST ( ISEQ_ARG_DECLARE LINK_ANCHOR anc1,
LINK_ANCHOR anc2 
) [static]

Definition at line 822 of file compile.c.

References iseq_link_anchor::anchor, iseq_link_anchor::last, iseq_link_element::next, iseq_link_element::prev, and verify_list().

Referenced by compile_array_().

static VALUE build_postexe_iseq ( rb_iseq_t iseq,
LINK_ANCHOR ret,
NODE body 
) [static]

Definition at line 3234 of file compile.c.

References ADD_CALL_WITH_BLOCK, ADD_INSN1, ID2SYM, id_core_set_postexe, INT2FIX, iseq_set_local_table(), make_name_for_block(), nd_line, NEW_CHILD_ISEQVAL, rb_iseq_struct::parent_iseq, Qnil, VALUE, and VM_SPECIAL_OBJECT_VMCORE.

static int calc_sp_depth ( int  depth,
INSN iobj 
) [static]

Definition at line 5458 of file compile.c.

References iseq_insn_data::insn_id, and iseq_insn_data::operands.

Referenced by iseq_set_sequence().

static VALUE case_when_optimizable_literal ( NODE node  )  [static]

Definition at line 2569 of file compile.c.

References FIXABLE, LONG2FIX, nd_type, node, NODE_LIT, NODE_STR, Qundef, rb_cNumeric, rb_dbl2big(), rb_fstring(), rb_obj_is_kind_of(), RB_TYPE_P, RFLOAT_VALUE, SYMBOL_P, T_FLOAT, and VALUE.

Referenced by when_vals().

static int cdhash_cmp ( VALUE  val,
VALUE  lit 
) [static]

Definition at line 1392 of file compile.c.

References BUILTIN_TYPE, rb_eql(), rb_str_hash_cmp(), SPECIAL_CONST_P, and T_STRING.

static st_index_t cdhash_hash ( VALUE  a  )  [static]

Definition at line 1408 of file compile.c.

References FIX2LONG, rb_hash(), rb_str_hash(), RB_TYPE_P, SPECIAL_CONST_P, T_STRING, and VALUE.

static int cdhash_set_label_i ( VALUE  key,
VALUE  val,
void *  ptr 
) [static]

Definition at line 1430 of file compile.c.

References cdhash_set_label_struct::hash, INT2FIX, cdhash_set_label_struct::len, cdhash_set_label_struct::pos, iseq_label_data::position, rb_hash_aset(), and ST_CONTINUE.

Referenced by iseq_set_sequence().

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

Definition at line 5882 of file compile.c.

References NUM2LONG.

Referenced by iseq_load(), and rb_iseq_build_from_ary().

static VALUE compile_array ( rb_iseq_t iseq,
LINK_ANCHOR ret,
NODE node_root,
enum compile_array_type_t  type 
) [static]

Definition at line 2563 of file compile.c.

References compile_array_(), and iseq_catch_table_entry::iseq.

Referenced by setup_args().

static int compile_array_ ( rb_iseq_t iseq,
LINK_ANCHOR ret,
NODE node_root,
enum compile_array_type_t  type,
int  poped 
) [static]

Definition at line 2415 of file compile.c.

References ADD_INSN, ADD_INSN1, ADD_SEND, APPEND_LIST(), COMPILE, COMPILE_, COMPILE_ARRAY_TYPE_ARRAY, COMPILE_ARRAY_TYPE_HASH, CPDEBUG, DECL_ANCHOR, ID2SYM, id_core_hash_from_ary, id_core_hash_merge_ary, id_core_hash_merge_kwd, id_core_hash_merge_ptr, INIT_ANCHOR, INT2FIX, iseq_catch_table_entry::iseq, iseq_add_mark_object_compile_time(), len, max(), nd_line, nd_type, node, NODE_ARRAY, NODE_LIT, NODE_ZARRAY, OBJ_FREEZE, rb_ary_push(), rb_ary_tmp_new(), rb_bug(), rb_intern, ruby_node_name(), VALUE, and VM_SPECIAL_OBJECT_VMCORE.

Referenced by compile_array().

static int compile_branch_condition ( rb_iseq_t iseq,
LINK_ANCHOR ret,
NODE cond,
LABEL then_label,
LABEL else_label 
) [static]

Definition at line 2364 of file compile.c.

References ADD_INSNL, ADD_LABEL, COMPILE, COMPILE_OK, cond, iseq_catch_table_entry::iseq, nd_line, nd_type, NEW_LABEL, NODE_AND, NODE_FALSE, NODE_LIT, NODE_NIL, NODE_OR, NODE_STR, and NODE_TRUE.

Referenced by iseq_compile_each().

static int compile_colon2 ( rb_iseq_t iseq,
NODE node,
LINK_ANCHOR pref,
LINK_ANCHOR body 
) [static]

Definition at line 2803 of file compile.c.

References ADD_INSN, ADD_INSN1, COMPILE, COMPILE_OK, debugi, ID2SYM, iseq_catch_table_entry::iseq, nd_line, nd_type, node, NODE_COLON2, NODE_COLON3, NODE_CONST, and rb_cObject.

static VALUE compile_cpath ( LINK_ANCHOR ret,
rb_iseq_t iseq,
NODE cpath 
) [static]

Definition at line 2830 of file compile.c.

References ADD_INSN1, COMPILE, INT2FIX, nd_line, nd_type, NODE_COLON3, Qfalse, Qtrue, rb_cObject, and VM_SPECIAL_OBJECT_CONST_BASE.

Referenced by iseq_compile_each().

static void* compile_data_alloc ( rb_iseq_t iseq,
size_t  size 
) [static]

Definition at line 636 of file compile.c.

References ALLOC_N, iseq_compile_data_storage::buff, rb_iseq_struct::compile_data, iseq_compile_data_storage::next, PADDING_SIZE_MAX, iseq_compile_data_storage::pos, iseq_compile_data_storage::size, and iseq_compile_data::storage_current.

Referenced by add_ensure_range(), compile_data_alloc_adjust(), compile_data_alloc_insn(), compile_data_alloc_label(), insn_set_specialized_instruction(), iseq_build_from_ary_body(), new_callinfo(), new_insn_body(), and new_insn_send().

static ADJUST* compile_data_alloc_adjust ( rb_iseq_t iseq  )  [static]

Definition at line 690 of file compile.c.

References compile_data_alloc().

Referenced by new_adjust_body().

static INSN* compile_data_alloc_insn ( rb_iseq_t iseq  )  [static]

Definition at line 678 of file compile.c.

References compile_data_alloc().

Referenced by new_insn_core().

static LABEL* compile_data_alloc_label ( rb_iseq_t iseq  )  [static]

Definition at line 684 of file compile.c.

References compile_data_alloc().

Referenced by new_label_body().

static int compile_dregx ( rb_iseq_t iseq,
LINK_ANCHOR ret,
NODE node 
) [static]

Definition at line 2355 of file compile.c.

References ADD_INSN2, cnt, compile_dstr_fragments(), COMPILE_OK, INT2FIX, iseq_catch_table_entry::iseq, nd_line, and node.

static int compile_dstr ( rb_iseq_t iseq,
LINK_ANCHOR ret,
NODE node 
) [static]

Definition at line 2346 of file compile.c.

References ADD_INSN1, cnt, compile_dstr_fragments(), COMPILE_OK, INT2FIX, iseq_catch_table_entry::iseq, nd_line, and node.

static int compile_dstr_fragments ( rb_iseq_t iseq,
LINK_ANCHOR ret,
NODE node,
int *  cntp 
) [static]

Definition at line 2314 of file compile.c.

References ADD_INSN1, cnt, COMPILE, COMPILE_OK, debugp_param, list, nd_line, nd_type, NIL_P, node, NODE_STR, rb_fstring(), RB_TYPE_P, T_STRING, and VALUE.

Referenced by compile_dregx(), and compile_dstr().

static int compile_massign ( rb_iseq_t iseq,
LINK_ANCHOR ret,
NODE node,
int  poped 
) [static]

Definition at line 2745 of file compile.c.

References ADD_INSN, ADD_INSN2, ADD_SEQ, COMPILE, compile_massign_lhs(), compile_massign_opt(), COMPILE_OK, DECL_ANCHOR, INIT_ANCHOR, INT2FIX, iseq_catch_table_entry::iseq, nd_line, nd_type, node, NODE_POSTARG, and VALUE.

Referenced by iseq_compile_each().

static int compile_massign_lhs ( rb_iseq_t iseq,
LINK_ANCHOR ret,
NODE node 
) [static]

Definition at line 2628 of file compile.c.

References ADD_ELEM(), ADD_INSN, ADD_INSN1, ADD_SEQ, rb_call_info_struct::argc, COMPILE_OK, COMPILE_POPED, DECL_ANCHOR, FIRST_ELEMENT(), INIT_ANCHOR, INT2FIX, nd_line, nd_type, node, NODE_ATTRASGN, NODE_MASGN, iseq_insn_data::operands, rb_call_info_struct::orig_argc, POP_ELEMENT(), REMOVE_ELEM(), and VALUE.

Referenced by compile_massign(), and compile_massign_opt_lhs().

static int compile_massign_opt ( rb_iseq_t iseq,
LINK_ANCHOR ret,
NODE rhsn,
NODE orig_lhsn 
) [static]

Definition at line 2680 of file compile.c.

References ADD_INSN, COMPILE, compile_massign_opt_lhs(), COMPILE_POPED, iseq_catch_table_entry::iseq, MEMORY, nd_line, nd_type, NODE_ARRAY, NODE_CVASGN, NODE_DASGN, NODE_DASGN_CURR, NODE_IASGN, NODE_IASGN2, NODE_LASGN, numberof, and VALUE.

Referenced by compile_massign().

static void compile_massign_opt_lhs ( rb_iseq_t iseq,
LINK_ANCHOR ret,
NODE lhsn 
) [static]

Definition at line 2671 of file compile.c.

References compile_massign_lhs(), and iseq_catch_table_entry::iseq.

Referenced by compile_massign_opt().

static int defined_expr ( rb_iseq_t iseq,
LINK_ANCHOR ret,
NODE node,
LABEL **  lfinish,
VALUE  needstr 
) [static]

Definition at line 2852 of file compile.c.

References ADD_INSN, ADD_INSN1, ADD_INSN3, ADD_INSNL, COMPILE, DEFINED_ASGN, DEFINED_CONST, DEFINED_CVAR, DEFINED_EXPR, defined_expr, DEFINED_FALSE, DEFINED_FUNC, DEFINED_GVAR, DEFINED_IVAR, DEFINED_LVAR, DEFINED_METHOD, DEFINED_NIL, DEFINED_REF, DEFINED_SELF, DEFINED_TRUE, DEFINED_YIELD, DEFINED_ZSUPER, FALSE, RNode::id, ID2SYM, INT2FIX, iseq_catch_table_entry::iseq, nd_line, nd_type, NEW_LABEL, node, NODE_AND, NODE_ARRAY, NODE_ATTRASGN, NODE_BACK_REF, NODE_CALL, NODE_CDECL, NODE_COLON2, NODE_COLON3, NODE_CONST, NODE_CVAR, NODE_CVASGN, NODE_CVDECL, NODE_DASGN, NODE_DASGN_CURR, NODE_DVAR, NODE_FALSE, NODE_FCALL, NODE_GASGN, NODE_GVAR, NODE_IASGN, NODE_IVAR, NODE_LASGN, NODE_LIT, NODE_LVAR, NODE_MASGN, NODE_NIL, NODE_NTH_REF, NODE_OP_ASGN1, NODE_OP_ASGN2, NODE_OP_ASGN_AND, NODE_OP_ASGN_OR, NODE_OR, NODE_SELF, NODE_STR, NODE_SUPER, NODE_TRUE, node_type, NODE_VCALL, NODE_YIELD, NODE_ZARRAY, NODE_ZSUPER, NULL, Qfalse, Qtrue, rb_cObject, rb_is_const_id(), rb_iseq_defined_string(), TRUE, type, and VALUE.

static void dump_disasm_list ( LINK_ELEMENT elem  )  [static]

Definition at line 5555 of file compile.c.

References FIX2LONG, insn_data_length(), insn_data_to_s_detail(), iseq_adjust_data::label, iseq_label_data::label_no, iseq_insn_data::line_no, link(), rb_eSyntaxError, rb_raise(), StringValueCStr, and VALUE.

Referenced by iseq_set_sequence(), and iseq_setup().

static LINK_ELEMENT* FIRST_ELEMENT ( LINK_ANCHOR anchor  )  [static]

Definition at line 751 of file compile.c.

References iseq_link_anchor::anchor, and iseq_link_element::next.

Referenced by compile_massign_lhs(), iseq_insns_unification(), iseq_optimize(), iseq_set_sequence(), iseq_set_sequence_stackcaching(), and iseq_setup().

static LINK_ELEMENT* get_destination_insn ( INSN iobj  )  [static]

Definition at line 1802 of file compile.c.

References iseq_label_data::link, list, iseq_link_element::next, and OPERAND_AT.

Referenced by iseq_peephole_optimize().

static int get_dyna_var_idx ( rb_iseq_t iseq,
ID  id,
int *  level,
int *  ls 
) [static]

Definition at line 1160 of file compile.c.

References get_dyna_var_idx_at_raw(), rb_iseq_struct::local_size, rb_iseq_struct::parent_iseq, and rb_bug().

Referenced by iseq_compile_each().

static int get_dyna_var_idx_at_raw ( rb_iseq_t iseq,
ID  id 
) [static]

Definition at line 1135 of file compile.c.

References rb_iseq_struct::local_table, and rb_iseq_struct::local_table_size.

Referenced by get_dyna_var_idx(), get_local_var_idx(), and iseq_set_arguments().

static VALUE get_exception_sym2type ( VALUE  sym  )  [static]

Definition at line 5635 of file compile.c.

References ID2SYM, rb_eSyntaxError, rb_inspect(), rb_intern, rb_raise(), StringValuePtr, sym_inspect(), and VALUE.

Referenced by iseq_build_from_ary_exception().

static int get_local_var_idx ( rb_iseq_t iseq,
ID  id 
) [static]

Definition at line 1148 of file compile.c.

References get_dyna_var_idx_at_raw(), rb_iseq_struct::local_iseq, and rb_bug().

Referenced by iseq_compile_each().

static int get_lvar_level ( rb_iseq_t iseq  )  [static]

Definition at line 1124 of file compile.c.

References rb_iseq_struct::local_iseq, and rb_iseq_struct::parent_iseq.

Referenced by iseq_compile_each().

static LINK_ELEMENT* get_next_insn ( INSN iobj  )  [static]

Definition at line 1818 of file compile.c.

References iseq_insn_data::link, list, and iseq_link_element::next.

Referenced by iseq_peephole_optimize().

static LINK_ELEMENT* get_prev_insn ( INSN iobj  )  [static]

Definition at line 1832 of file compile.c.

References iseq_insn_data::link, list, and iseq_link_element::prev.

Referenced by iseq_peephole_optimize().

static void INSERT_ELEM_NEXT ( LINK_ELEMENT elem1,
LINK_ELEMENT elem2 
) [static]

Definition at line 699 of file compile.c.

References iseq_link_element::next, and iseq_link_element::prev.

Referenced by iseq_peephole_optimize().

static void INSERT_LIST ( ISEQ_ARG_DECLARE LINK_ANCHOR anc1,
LINK_ANCHOR anc2 
) [static]

Definition at line 843 of file compile.c.

References iseq_link_anchor::anchor, iseq_link_anchor::last, iseq_link_element::next, iseq_link_element::prev, and verify_list().

Referenced by setup_args().

static int insn_data_length ( INSN iobj  )  [static]

Definition at line 5452 of file compile.c.

References iseq_insn_data::insn_id.

Referenced by dump_disasm_list(), and iseq_set_sequence().

static VALUE insn_data_to_s_detail ( INSN iobj  )  [static]

Definition at line 5483 of file compile.c.

References FIX2INT, rb_global_entry::id, iseq_insn_data::insn_id, iseq_label_data::label_no, rb_call_info_struct::mid, OPERAND_AT, iseq_insn_data::operands, opobj_inspect(), rb_call_info_struct::orig_argc, Qnil, rb_eSyntaxError, rb_id2name(), rb_raise(), rb_sprintf(), rb_str_cat2(), rb_str_catf(), rb_str_concat(), rb_iseq_struct::self, val, and VALUE.

Referenced by dump_disasm_list().

static struct st_table* insn_make_insn_table ( void   )  [static]

Definition at line 5703 of file compile.c.

References ID2SYM, rb_intern, st_init_numtable(), and st_insert().

Referenced by iseq_build_from_ary_body().

static int insn_set_specialized_instruction ( rb_iseq_t iseq,
INSN iobj,
int  insn_id 
) [static]

Definition at line 1965 of file compile.c.

References compile_data_alloc(), COMPILE_OK, idEq, iseq_insn_data::insn_id, iseq_catch_table_entry::iseq, new_callinfo(), iseq_insn_data::operand_size, iseq_insn_data::operands, rb_bug(), and VALUE.

static int iseq_add_mark_object ( rb_iseq_t iseq,
VALUE  v 
) [static]

Definition at line 414 of file compile.c.

References COMPILE_OK, rb_iseq_add_mark_object(), and SPECIAL_CONST_P.

Referenced by iseq_build_from_ary_body(), iseq_build_load_iseq(), iseq_compile_each(), iseq_set_exception_table(), iseq_set_sequence(), and new_child_iseq().

static int iseq_add_mark_object_compile_time ( rb_iseq_t iseq,
VALUE  v 
) [static]

Definition at line 425 of file compile.c.

References rb_iseq_struct::compile_data, COMPILE_OK, iseq_compile_data::mark_ary, rb_ary_push(), and SPECIAL_CONST_P.

Referenced by compile_array_(), and iseq_build_from_ary_body().

static int iseq_build_from_ary_body ( rb_iseq_t iseq,
LINK_ANCHOR anchor,
VALUE  body,
struct st_table labels_table 
) [static]

Definition at line 5734 of file compile.c.

References ADD_ELEM(), ADD_LABEL, argv, compile_data_alloc(), COMPILE_OK, FIX2INT, FIXNUM_P, ID2SYM, insn_make_insn_table(), rb_iseq_struct::is_size, iseq_add_mark_object(), iseq_add_mark_object_compile_time(), iseq_build_load_iseq(), iseq_setup(), len, rb_iseq_struct::location, new_callinfo(), new_insn_core(), NIL_P, NUM2INT, NUM2ULONG, rb_iseq_location_struct::path, Qnil, RARRAY_AREF, RARRAY_CONST_PTR, RARRAY_LEN, RARRAY_LENINT, rb_ary_dup(), rb_ary_entry(), rb_ary_store(), rb_compile_error, rb_convert_type(), rb_eSyntaxError, rb_eTypeError, RB_GC_GUARD, rb_global_entry(), rb_hash_aref(), rb_inspect(), rb_intern, rb_raise(), RB_TYPE_P, register_label(), RSTRING_PTR, st_data_t, st_free_table(), st_lookup(), sym, SYM2ID, SYMBOL_P, T_ARRAY, T_SYMBOL, validate_labels(), and VALUE.

Referenced by rb_iseq_build_from_ary().

static int iseq_build_from_ary_exception ( rb_iseq_t iseq,
struct st_table labels_table,
VALUE  exception 
) [static]

Definition at line 5665 of file compile.c.

References ADD_CATCH_ENTRY, COMPILE_OK, get_exception_sym2type(), NUM2INT, Qnil, RARRAY_AREF, RARRAY_CONST_PTR, RARRAY_LEN, rb_convert_type(), rb_eSyntaxError, RB_GC_GUARD, rb_iseq_load(), rb_raise(), register_label(), rb_iseq_struct::self, T_ARRAY, and VALUE.

Referenced by rb_iseq_build_from_ary().

static VALUE iseq_build_load_iseq ( rb_iseq_t iseq,
VALUE  op 
) [static]

Definition at line 5717 of file compile.c.

References CLASS_OF, iseq_add_mark_object(), Qnil, rb_cISeq, rb_eSyntaxError, rb_iseq_load(), rb_raise(), RB_TYPE_P, rb_iseq_struct::self, T_ARRAY, and VALUE.

Referenced by iseq_build_from_ary_body().

static int iseq_compile_each ( rb_iseq_t iseq,
LINK_ANCHOR ret,
NODE node,
int  poped 
) [static]

compile each node

self: InstructionSequence node: Ruby compiled node poped: This node will be poped

Definition at line 3253 of file compile.c.

References ADD_ADJUST, ADD_ADJUST_RESTORE, ADD_CALL, ADD_CALL_RECEIVER, ADD_CATCH_ENTRY, add_ensure_iseq(), ADD_INSN, ADD_INSN1, ADD_INSN2, ADD_INSN3, ADD_INSNL, ADD_LABEL, ADD_SEND, ADD_SEND_R, ADD_SEQ, ADD_TRACE, rb_iseq_struct::arg_opts, rb_iseq_struct::arg_simple, rb_iseq_struct::argc, args, ensure_range::begin, cdhash_type, COMPILE, COMPILE_, compile_branch_condition(), compile_cpath(), rb_iseq_struct::compile_data, COMPILE_ERROR, compile_massign(), COMPILE_NG, COMPILE_OK, COMPILE_POPED, CONST_ID, iseq_compile_data::current_block, debug_node_start, debugp_param, debugs, DECL_ANCHOR, DEFINED_CONST, defined_expr, ensure_range::end, iseq_compile_data::end_label, iseq_compile_data::ensure_node_stack, iseq_compile_data_ensure_node_stack::erange, ERROR_ARGS, FIX2INT, FIXNUM_INC, RNode::flags, get_dyna_var_idx(), get_local_var_idx(), get_lvar_level(), head, ID2SYM, idAREF, idASET, if(), INIT_ANCHOR, INT2FIX, rb_iseq_struct::is_size, iseq_add_mark_object(), rb_iseq_location_struct::label, iseq_compile_data::last_line, level, rb_iseq_struct::local_iseq, rb_iseq_struct::local_size, rb_iseq_struct::location, LONG2FIX, iseq_compile_data::loopval_popped, make_name_for_block(), nd_line, nd_type, NEW_CHILD_ISEQVAL, NEW_LABEL, ensure_range::next, node, NODE_AND, NODE_ARGSCAT, NODE_ARGSPUSH, NODE_ARRAY, NODE_BEGIN, NODE_BLOCK, NODE_BLOCK_PASS, NODE_BREAK, NODE_CALL, NODE_CASE, NODE_CDECL, NODE_COLON2, NODE_COLON3, NODE_CVASGN, NODE_DASGN, NODE_DASGN_CURR, NODE_ENSURE, NODE_FCALL, NODE_FL_NEWLINE, NODE_FOR, NODE_GASGN, NODE_IASGN, NODE_IASGN2, NODE_IF, NODE_ITER, NODE_LASGN, NODE_LIT, NODE_MASGN, NODE_NEXT, NODE_OP_ASGN1, NODE_OP_ASGN2, NODE_OP_ASGN_AND, NODE_OP_ASGN_OR, NODE_OP_CDECL, NODE_OPT_N, NODE_OR, NODE_REDO, NODE_RESBODY, NODE_RESCUE, NODE_RETRY, NODE_SPLAT, NODE_STR, NODE_SUPER, node_type, NODE_UNTIL, NODE_VCALL, NODE_WHEN, NODE_WHILE, NODE_ZARRAY, NODE_ZSUPER, NULL, iseq_compile_data::option, rb_iseq_struct::parent_iseq, iseq_label_data::position, iseq_compile_data_ensure_node_stack::prev, push_ensure_entry(), Qfalse, Qundef, rb_bug(), rb_cObject, rb_eStandardError, rb_fstring(), rb_hash_new(), rb_hash_tbl_raw(), rb_id2name(), rb_str_concat(), rb_str_new2, iseq_compile_data::redo_label, RUBY_EVENT_LINE, ruby_node_name(), setup_args(), st_data_t, st_init_numtable(), st_insert(), st_lookup(), iseq_compile_data::start_label, SYM2ID, SYMBOL_P, rb_compile_option_struct::tailcall_optimization, rb_iseq_struct::type, st_table::type, type, val, VALUE, VM_CALL_ARGS_SPLAT, VM_CALL_FCALL, VM_CALL_VCALL, VM_CHECKMATCH_ARRAY, VM_CHECKMATCH_TYPE_CASE, VM_CHECKMATCH_TYPE_RESCUE, VM_CHECKMATCH_TYPE_WHEN, VM_SPECIAL_OBJECT_CONST_BASE, and when_vals().

static int iseq_insns_unification ( rb_iseq_t iseq,
LINK_ANCHOR anchor 
) [static]

Definition at line 2104 of file compile.c.

References FIRST_ELEMENT(), id, if(), iseq_insn_data::insn_id, iseq_catch_table_entry::iseq, iseq_insn_data::link, list, iseq_link_element::next, iseq_link_element::prev, and iseq_link_element::type.

Referenced by iseq_setup().

static int iseq_optimize ( rb_iseq_t iseq,
LINK_ANCHOR anchor 
) [static]

Definition at line 2036 of file compile.c.

References COMPILE_OK, FIRST_ELEMENT(), iseq_catch_table_entry::iseq, iseq_peephole_optimize(), iseq_specialized_instruction(), and list.

Referenced by iseq_setup().

static int iseq_peephole_optimize ( rb_iseq_t iseq,
LINK_ELEMENT list,
const int  do_tailcallopt 
) [static]

Definition at line 1846 of file compile.c.

References rb_call_info_struct::blockiseq, COMPILE_OK, rb_call_info_struct::flag, get_destination_insn(), get_next_insn(), get_prev_insn(), if(), INSERT_ELEM_NEXT(), iseq_insn_data::insn_id, iseq_catch_table_entry::iseq, iseq_insn_data::line_no, iseq_insn_data::link, list, new_insn_core(), OPERAND_AT, iseq_insn_data::operand_size, iseq_insn_data::operands, REMOVE_ELEM(), REPLACE_ELEM(), and VM_CALL_TAILCALL.

Referenced by iseq_optimize().

static int iseq_set_arguments ( rb_iseq_t iseq,
LINK_ANCHOR anchor,
NODE node 
) [static]

Definition at line 1183 of file compile.c.

References ADD_INSN, ADD_LABEL, ALLOC_N, rb_iseq_struct::arg_block, rb_iseq_struct::arg_keyword, rb_iseq_struct::arg_keyword_check, rb_iseq_struct::arg_keyword_required, rb_iseq_struct::arg_keyword_table, rb_iseq_struct::arg_keywords, 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, args, COMPILE, COMPILE_OK, COMPILE_POPED, debugs, FIX2INT, get_dyna_var_idx_at_raw(), INT2FIX, list, MEMCPY, nd_line, nd_type, NEW_LABEL, node, NODE_ARGS, RARRAY_AREF, RARRAY_CONST_PTR, rb_ary_clear(), rb_ary_concat(), rb_ary_push(), rb_ary_tmp_new(), rb_bug(), ruby_node_name(), rb_iseq_struct::type, and VALUE.

Referenced by rb_iseq_compile_node().

static int iseq_set_exception_local_table ( rb_iseq_t iseq  )  [static]

Definition at line 1111 of file compile.c.

References ALLOC_N, COMPILE_OK, CONST_ID, rb_iseq_struct::local_size, rb_iseq_struct::local_table, and rb_iseq_struct::local_table_size.

Referenced by rb_iseq_compile_node().

static int iseq_set_exception_table ( rb_iseq_t iseq  )  [static]

Definition at line 1731 of file compile.c.

References ALLOC_N, catch_type(), iseq_catch_table_entry::CATCH_TYPE_BREAK, iseq_catch_table_entry::CATCH_TYPE_NEXT, iseq_catch_table_entry::CATCH_TYPE_RESCUE, COMPILE_OK, iseq_catch_table_entry::cont, iseq_catch_table_entry::end, iseq_catch_table_entry::iseq, iseq_add_mark_object(), label_get_position(), label_get_sp(), RARRAY_CONST_PTR, RARRAY_LEN, RB_OBJ_WRITE, iseq_catch_table_entry::sp, iseq_catch_table_entry::start, iseq_catch_table_entry::type, and VALUE.

Referenced by iseq_setup().

static int iseq_set_local_table ( rb_iseq_t iseq,
ID tbl 
) [static]

Definition at line 1360 of file compile.c.

References ALLOC_N, COMPILE_OK, debugs, rb_iseq_struct::local_size, rb_iseq_struct::local_table, rb_iseq_struct::local_table_size, and MEMCPY.

Referenced by build_postexe_iseq(), and rb_iseq_compile_node().

static int iseq_set_optargs_table ( rb_iseq_t iseq  )  [static]

Definition at line 1788 of file compile.c.

References COMPILE_OK, iseq_catch_table_entry::iseq, and label_get_position().

Referenced by iseq_setup().

static int iseq_set_sequence ( rb_iseq_t iseq,
LINK_ANCHOR anchor 
) [static]

ruby insn object list -> raw instruction sequence

Definition at line 1442 of file compile.c.

References ALLOC_N, rb_call_info_struct::argc, rb_call_info_struct::aux, calc_sp_depth(), rb_iseq_struct::callinfo_entries, rb_iseq_struct::callinfo_size, cdhash_set_label_i(), dump_disasm_list(), FIRST_ELEMENT(), FIX2INT, GetISeqPtr, cdhash_set_label_struct::hash, hide_obj, if(), rb_call_info_struct::index, insn_data_length(), iseq_insn_data::insn_id, rb_iseq_struct::is_entries, rb_iseq_struct::is_size, iseq_add_mark_object(), iseq_adjust_data::label, cdhash_set_label_struct::len, len, iseq_line_info_entry::line_no, iseq_adjust_data::line_no, iseq_insn_data::line_no, list, rb_iseq_struct::location, MEMZERO, iseq_insn_data::operand_size, iseq_insn_data::operands, rb_iseq_location_struct::path, cdhash_set_label_struct::pos, iseq_line_info_entry::position, iseq_label_data::position, rb_bug(), rb_compile_error, rb_hash_foreach(), RSTRING_PTR, iseq_label_data::set, iseq_label_data::sp, SYM2ID, TRUE, type, UNLIKELY, VALUE, and xfree.

Referenced by iseq_setup().

static int iseq_set_sequence_stackcaching ( rb_iseq_t iseq,
LINK_ANCHOR anchor 
) [static]

Definition at line 2218 of file compile.c.

References COMPILE_OK, FIRST_ELEMENT(), iseq_insn_data::insn_id, iseq_catch_table_entry::iseq, iseq_insn_data::line_no, list, new_insn_body(), rb_compile_error, REMOVE_ELEM(), REPLACE_ELEM(), and RSTRING_PTR.

Referenced by iseq_setup().

static int iseq_setup ( rb_iseq_t iseq,
LINK_ANCHOR anchor 
) [static]

Definition at line 1059 of file compile.c.

References rb_iseq_struct::compile_data, compile_debug, debugs, dump_disasm_list(), FIRST_ELEMENT(), rb_compile_option_struct::instructions_unification, iseq_insns_unification(), iseq_optimize(), iseq_set_exception_table(), iseq_set_optargs_table(), iseq_set_sequence(), iseq_set_sequence_stackcaching(), iseq_compile_data::option, rb_iseq_disasm(), rb_iseq_translate_threaded_code(), rb_iseq_struct::self, rb_compile_option_struct::stack_caching, StringValueCStr, and VALUE.

Referenced by iseq_build_from_ary_body(), and rb_iseq_compile_node().

static int iseq_specialized_instruction ( rb_iseq_t iseq,
INSN iobj 
) [static]

Definition at line 1985 of file compile.c.

References rb_call_info_struct::blockiseq, COMPILE_OK, div, eq(), rb_call_info_struct::flag, ge, gt, idAREF, idASET, idDIV, idEmptyP, idEq, idGE, idGT, idLE, idLT, idLTLT, idMINUS, idMOD, idMULT, idNeq, idNot, idPLUS, iseq_insn_data::insn_id, le, lt, rb_call_info_struct::mid, mod, mult(), OPERAND_AT, rb_call_info_struct::orig_argc, SP_INSN, and VM_CALL_ARGS_SKIP_SETUP.

Referenced by iseq_optimize().

static int label_get_position ( LABEL lobj  )  [static]

Definition at line 1719 of file compile.c.

References iseq_label_data::position.

Referenced by iseq_set_exception_table(), and iseq_set_optargs_table().

static int label_get_sp ( LABEL lobj  )  [static]

Definition at line 1725 of file compile.c.

References iseq_label_data::sp.

Referenced by iseq_set_exception_table().

static int LIST_SIZE_ZERO ( LINK_ANCHOR anchor  )  [static]

Definition at line 804 of file compile.c.

References iseq_link_anchor::anchor, and iseq_link_element::next.

Referenced by setup_args().

static VALUE make_name_for_block ( rb_iseq_t iseq  )  [static]

Definition at line 3063 of file compile.c.

References iseq_catch_table_entry::iseq, rb_iseq_location_struct::label, level, rb_iseq_struct::local_iseq, rb_iseq_struct::location, rb_iseq_struct::parent_iseq, PRIsVALUE, rb_sprintf(), and rb_iseq_struct::type.

Referenced by build_postexe_iseq(), and iseq_compile_each().

static ADJUST * new_adjust_body ( rb_iseq_t iseq,
LABEL label,
int  line 
) [static]

Definition at line 961 of file compile.c.

References compile_data_alloc_adjust(), iseq_adjust_data::label, iseq_adjust_data::line_no, iseq_adjust_data::link, iseq_link_element::next, and iseq_link_element::type.

static rb_call_info_t* new_callinfo ( rb_iseq_t iseq,
ID  mid,
int  argc,
VALUE  block,
unsigned long  flag 
) [static]

Definition at line 1007 of file compile.c.

References rb_call_info_struct::argc, rb_call_info_struct::aux, rb_call_info_struct::blockiseq, rb_call_info_struct::blockptr, rb_call_info_struct::call, rb_iseq_struct::callinfo_size, rb_call_info_struct::class_serial, compile_data_alloc(), rb_call_info_struct::flag, GetISeqPtr, rb_call_info_struct::index, rb_call_info_struct::method_state, rb_call_info_struct::mid, rb_call_info_struct::orig_argc, Qundef, rb_call_info_struct::recv, VM_CALL_ARGS_BLOCKARG, VM_CALL_ARGS_SKIP_SETUP, and VM_CALL_ARGS_SPLAT.

Referenced by insn_set_specialized_instruction(), iseq_build_from_ary_body(), and new_insn_send().

static VALUE new_child_iseq ( rb_iseq_t iseq,
NODE node,
VALUE  name,
VALUE  parent,
enum iseq_type  type,
int  line_no 
) [static]

Definition at line 1044 of file compile.c.

References rb_iseq_struct::compile_data, debugs, INT2FIX, iseq_absolute_path, iseq_add_mark_object(), iseq_path, node, iseq_compile_data::option, rb_iseq_new_with_opt(), rb_iseq_struct::self, and VALUE.

static INSN * new_insn_body ( rb_iseq_t iseq,
int  line_no,
int  insn_id,
int  argc,
  ... 
) [static]

Definition at line 989 of file compile.c.

References argv, compile_data_alloc(), new_insn_core(), va_init_list, and VALUE.

Referenced by iseq_set_sequence_stackcaching().

static INSN* new_insn_core ( rb_iseq_t iseq,
int  line_no,
int  insn_id,
int  argc,
VALUE *  argv 
) [static]

Definition at line 972 of file compile.c.

References compile_data_alloc_insn(), iseq_insn_data::insn_id, iseq_insn_data::line_no, iseq_insn_data::link, iseq_link_element::next, iseq_insn_data::operand_size, iseq_insn_data::operands, iseq_insn_data::sc_state, and iseq_link_element::type.

Referenced by iseq_build_from_ary_body(), iseq_peephole_optimize(), new_insn_body(), and new_insn_send().

static INSN* new_insn_send ( rb_iseq_t iseq,
int  line_no,
VALUE  id,
VALUE  argc,
VALUE  block,
VALUE  flag 
) [static]

Definition at line 1036 of file compile.c.

References compile_data_alloc(), FIX2INT, new_callinfo(), new_insn_core(), SYM2ID, and VALUE.

static LABEL * new_label_body ( rb_iseq_t iseq,
long  line 
) [static]

Definition at line 947 of file compile.c.

References rb_iseq_struct::compile_data, compile_data_alloc_label(), iseq_compile_data::label_no, iseq_label_data::label_no, iseq_label_data::link, iseq_link_element::next, iseq_label_data::sc_state, iseq_label_data::sp, and iseq_link_element::type.

static VALUE opobj_inspect ( VALUE  obj  )  [static]

Definition at line 5464 of file compile.c.

References BUILTIN_TYPE, RBasic::klass, rb_ary_dup(), rb_inspect(), rb_str_new_cstr(), RSTRING_PTR, SPECIAL_CONST_P, T_ARRAY, and T_STRING.

Referenced by insn_data_to_s_detail().

static LINK_ELEMENT* POP_ELEMENT ( ISEQ_ARG_DECLARE LINK_ANCHOR anchor  )  [static]

Definition at line 765 of file compile.c.

References iseq_link_element::next, iseq_link_element::prev, and verify_list().

Referenced by compile_massign_lhs().

static void push_ensure_entry ( rb_iseq_t iseq,
struct iseq_compile_data_ensure_node_stack enl,
struct ensure_range er,
NODE node 
) [static]

Definition at line 3086 of file compile.c.

References iseq_compile_data_ensure_node_stack::ensure_node, iseq_compile_data_ensure_node_stack::erange, iseq_catch_table_entry::iseq, node, and iseq_compile_data_ensure_node_stack::prev.

Referenced by iseq_compile_each().

static ID r_id ( ID  id  )  [inline, static]

Definition at line 135 of file compile.c.

static VALUE r_value ( VALUE  value  )  [inline, static]

Definition at line 141 of file compile.c.

int rb_dvar_defined ( ID  id  ) 

Definition at line 5959 of file compile.c.

References rb_thread_struct::base_block, GET_THREAD(), rb_block_struct::iseq, rb_iseq_struct::local_table, rb_iseq_struct::local_table_size, rb_iseq_struct::parent_iseq, and rb_iseq_struct::type.

Referenced by dvar_defined_gen().

const char* rb_insns_name ( int  i  ) 

Definition at line 5601 of file compile.c.

VALUE rb_insns_name_array ( void   ) 

Definition at line 5607 of file compile.c.

References numberof, rb_ary_new(), rb_ary_push(), rb_fstring(), rb_obj_freeze(), rb_str_new2, and VALUE.

Referenced by Init_VM().

VALUE rb_iseq_build_from_ary ( rb_iseq_t iseq,
VALUE  locals,
VALUE  args,
VALUE  exception,
VALUE  body 
)

Definition at line 5885 of file compile.c.

References ALLOC_N, 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, CHECK_ARRAY, CHECK_INTEGER(), CHECK_SYMBOL, DECL_ANCHOR, FIX2INT, FIX2LONG, FIXNUM_P, INIT_ANCHOR, iseq_build_from_ary_body(), iseq_build_from_ary_exception(), rb_iseq_struct::local_size, rb_iseq_struct::local_table, rb_iseq_struct::local_table_size, NUM2INT, RARRAY_AREF, RARRAY_LEN, RARRAY_LENINT, rb_ary_entry(), register_label(), rb_iseq_struct::self, st_init_numtable(), SYM2ID, and VALUE.

Referenced by iseq_load().

VALUE rb_iseq_compile_node ( VALUE  self,
NODE node 
)

Definition at line 459 of file compile.c.

References ADD_CATCH_ENTRY, ADD_INSN, ADD_INSN1, ADD_INSN2, ADD_LABEL, ADD_TRACE, COMPILE, rb_iseq_struct::compile_data, COMPILE_POPED, DECL_ANCHOR, ensure_range::end, ERROR_ARGS, FIX2INT, GetISeqPtr, INIT_ANCHOR, INT2FIX, iseq_set_arguments(), iseq_set_exception_local_table(), iseq_set_local_table(), iseq_setup(), iseq_compile_data::last_line, nd_line, nd_type, NEW_LABEL, node, NODE_IFUNC, NODE_SCOPE, rb_bug(), rb_compile_error, RUBY_EVENT_B_CALL, RUBY_EVENT_B_RETURN, RUBY_EVENT_CALL, RUBY_EVENT_CLASS, RUBY_EVENT_END, RUBY_EVENT_RETURN, rb_iseq_struct::type, and validate_labels().

Referenced by rb_iseq_new_with_bopt_and_opt().

int rb_iseq_translate_threaded_code ( rb_iseq_t iseq  ) 

Definition at line 561 of file compile.c.

References ALLOC_N, COMPILE_OK, rb_iseq_struct::iseq, rb_iseq_struct::iseq_encoded, rb_iseq_struct::iseq_size, len, MEMCPY, rb_vm_get_insns_address_table(), and VALUE.

Referenced by iseq_setup(), and rb_iseq_build_for_ruby2cext().

int rb_local_defined ( ID  id  ) 

Definition at line 5984 of file compile.c.

References rb_thread_struct::base_block, GET_THREAD(), rb_block_struct::iseq, rb_iseq_struct::local_iseq, rb_iseq_struct::local_table, and rb_iseq_struct::local_table_size.

Referenced by local_id_gen().

int rb_parse_in_eval ( void   ) 

Definition at line 6003 of file compile.c.

References GET_THREAD(), and rb_thread_struct::parse_in_eval.

Referenced by parser_compile_string(), and rb_parser_compile_file_path().

int rb_parse_in_main ( void   ) 

Definition at line 6009 of file compile.c.

References GET_THREAD(), and rb_thread_struct::parse_in_eval.

Referenced by yyparse().

static LABEL* register_label ( rb_iseq_t iseq,
struct st_table labels_table,
VALUE  obj 
) [static]

Definition at line 5618 of file compile.c.

References NEW_LABEL, rb_convert_type(), st_data_t, st_insert(), st_lookup(), and T_SYMBOL.

Referenced by iseq_build_from_ary_body(), iseq_build_from_ary_exception(), iseq_data_to_ary(), and rb_iseq_build_from_ary().

static void REMOVE_ELEM ( LINK_ELEMENT elem  )  [static]

Definition at line 742 of file compile.c.

References iseq_link_element::next, and iseq_link_element::prev.

Referenced by compile_massign_lhs(), iseq_peephole_optimize(), and iseq_set_sequence_stackcaching().

static void REPLACE_ELEM ( LINK_ELEMENT elem1,
LINK_ELEMENT elem2 
) [static]

Definition at line 729 of file compile.c.

References iseq_link_element::next, and iseq_link_element::prev.

Referenced by iseq_peephole_optimize(), and iseq_set_sequence_stackcaching().

static VALUE setup_args ( rb_iseq_t iseq,
LINK_ANCHOR args,
NODE argn,
VALUE *  flag 
) [static]

Definition at line 3150 of file compile.c.

References ADD_INSN, ADD_INSN1, ADD_SEQ, args, COMPILE, compile_array(), COMPILE_ARRAY_TYPE_ARGS, DECL_ANCHOR, INIT_ANCHOR, INSERT_LIST(), INT2FIX, LIST_SIZE_ZERO(), nd_line, nd_type, NODE_ARGSCAT, NODE_ARGSPUSH, NODE_ARRAY, NODE_BLOCK_PASS, NODE_SPLAT, Qfalse, rb_bug(), ruby_node_name(), VALUE, VM_CALL_ARGS_BLOCKARG, and VM_CALL_ARGS_SPLAT.

Referenced by iseq_compile_each().

static int validate_label ( st_data_t  name,
st_data_t  label,
st_data_t  arg 
) [static]

Definition at line 434 of file compile.c.

References COMPILE_ERROR, iseq_label_data::link, iseq_link_element::next, iseq_label_data::position, rb_id2name(), ruby_sourcefile, and ST_CONTINUE.

Referenced by validate_labels().

static void validate_labels ( rb_iseq_t iseq,
st_table labels_table 
) [static]

Definition at line 450 of file compile.c.

References NIL_P, rb_exc_raise(), st_data_t, st_foreach(), and validate_label().

Referenced by iseq_build_from_ary_body(), and rb_iseq_compile_node().

static void verify_list ( ISEQ_ARG_DECLARE const char *  info,
LINK_ANCHOR anchor 
) [static]

Definition at line 352 of file compile.c.

References iseq_link_anchor::anchor, compile_debug, iseq_link_anchor::last, list, iseq_link_element::next, and rb_bug().

Referenced by ADD_ELEM(), APPEND_ELEM(), APPEND_LIST(), INSERT_LIST(), and POP_ELEMENT().

static int when_vals ( rb_iseq_t iseq,
LINK_ANCHOR cond_seq,
NODE vals,
LABEL l1,
int  only_special_literals,
VALUE  literals 
) [static]

Definition at line 2591 of file compile.c.

References ADD_INSN, ADD_INSN1, ADD_INSNL, case_when_optimizable_literal(), COMPILE, debugp_param, INT2FIX, iseq_catch_table_entry::iseq, nd_line, nd_type, NODE_STR, Qnil, Qundef, rb_compile_warning(), rb_fstring(), rb_hash_aset(), rb_hash_lookup, RSTRING_PTR, val, VALUE, and VM_CHECKMATCH_TYPE_CASE.

Referenced by iseq_compile_each().


Variable Documentation

struct st_hash_type cdhash_type [static]

Initial value:

Definition at line 1418 of file compile.c.

Referenced by iseq_compile_each().


Generated on 19 Jul 2016 for Ruby by  doxygen 1.4.7