Ruby  2.1.10p492(2016-04-01revision54464)
Data Structures | Macros | Typedefs | Enumerations | Functions | Variables
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
 

Macros

#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. More...
 
#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 struct iseq_link_element LINK_ELEMENT
 
typedef struct iseq_link_anchor LINK_ANCHOR
 
typedef struct iseq_label_data LABEL
 
typedef struct iseq_insn_data INSN
 
typedef struct 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 More...
 
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 More...
 
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 const struct st_hash_type cdhash_type
 

Macro Definition Documentation

◆ ADD_ADJUST

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

◆ ADD_ADJUST_RESTORE

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

◆ ADD_CALL

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

◆ ADD_CALL_RECEIVER

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

Definition at line 207 of file compile.c.

Referenced by iseq_compile_each().

◆ ADD_CALL_WITH_BLOCK

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

◆ ADD_CATCH_ENTRY

#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)))
VALUE rb_ary_push(VALUE ary, VALUE item)
Definition: array.c:900
#define le(x, y)
Definition: time.c:69
int type
Definition: tcltklib.c:112
unsigned long VALUE
Definition: ruby.h:88
#define rb_ary_new3
Definition: intern.h:91

Definition at line 247 of file compile.c.

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

◆ ADD_INSN

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

◆ ADD_INSN1

#define ADD_INSN1 (   seq,
  line,
  insn,
  op1 
)
Value:
ADD_ELEM((seq), (LINK_ELEMENT *) \
new_insn_body(iseq, (line), BIN(insn), 1, (VALUE)(op1)))
static void ADD_ELEM(ISEQ_ARG_DECLARE LINK_ANCHOR *anchor, LINK_ELEMENT *elem)
Definition: compile.c:387
static INSN * new_insn_body(rb_iseq_t *iseq, int line_no, int insn_id, int argc,...)
Definition: compile.c:989
unsigned long VALUE
Definition: ruby.h:88

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

◆ ADD_INSN2

#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)))
static void ADD_ELEM(ISEQ_ARG_DECLARE LINK_ANCHOR *anchor, LINK_ELEMENT *elem)
Definition: compile.c:387
static INSN * new_insn_body(rb_iseq_t *iseq, int line_no, int insn_id, int argc,...)
Definition: compile.c:989
unsigned long VALUE
Definition: ruby.h:88

Definition at line 195 of file compile.c.

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

◆ ADD_INSN3

#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)))
static void ADD_ELEM(ISEQ_ARG_DECLARE LINK_ANCHOR *anchor, LINK_ELEMENT *elem)
Definition: compile.c:387
static INSN * new_insn_body(rb_iseq_t *iseq, int line_no, int insn_id, int argc,...)
Definition: compile.c:989
unsigned long VALUE
Definition: ruby.h:88

Definition at line 199 of file compile.c.

Referenced by defined_expr(), and iseq_compile_each().

◆ ADD_INSNL

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

◆ ADD_LABEL

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

◆ ADD_SEND

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

◆ ADD_SEND_R

#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)))
static INSN * new_insn_send(rb_iseq_t *iseq, int line_no, VALUE id, VALUE argc, VALUE block, VALUE flag)
Definition: compile.c:1036
static void ADD_ELEM(ISEQ_ARG_DECLARE LINK_ANCHOR *anchor, LINK_ELEMENT *elem)
Definition: compile.c:387
int argc
Definition: ruby.c:131
unsigned long VALUE
Definition: ruby.h:88

Definition at line 216 of file compile.c.

Referenced by iseq_compile_each().

◆ ADD_SEQ

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

◆ ADD_TRACE

#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)
#define RUBY_EVENT_LINE
Definition: ruby.h:1715
#define INT2FIX(i)
Definition: ruby.h:231
#define RUBY_EVENT_COVERAGE
Definition: ruby.h:1734

Definition at line 221 of file compile.c.

Referenced by iseq_compile_each(), and rb_iseq_compile_node().

◆ APPEND_LABEL

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

Definition at line 238 of file compile.c.

◆ BUFSIZE

#define BUFSIZE   0x100

Definition at line 3060 of file compile.c.

◆ CHECK_ARRAY

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

Definition at line 5890 of file compile.c.

Referenced by rb_iseq_build_from_ary().

◆ CHECK_STRING

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

Definition at line 5891 of file compile.c.

◆ CHECK_SYMBOL

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

Definition at line 5892 of file compile.c.

Referenced by rb_iseq_build_from_ary().

◆ COMPILE

#define COMPILE (   anchor,
  desc,
  node 
)
Value:
(debug_compile("== " desc "\n", \
iseq_compile_each(iseq, (anchor), (node), 0)))
#define debug_compile(msg, v)
Definition: compile.c:160
static int iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *anchor, NODE *n, int)
compile each node
Definition: compile.c:3253

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

◆ COMPILE_

#define COMPILE_ (   anchor,
  desc,
  node,
  poped 
)
Value:
(debug_compile("== " desc "\n", \
iseq_compile_each(iseq, (anchor), (node), (poped))))
#define debug_compile(msg, v)
Definition: compile.c:160
static int iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *anchor, NODE *n, int)
compile each node
Definition: compile.c:3253

Definition at line 264 of file compile.c.

Referenced by compile_array_(), and iseq_compile_each().

◆ compile_debug

#define compile_debug   CPDEBUG

Definition at line 95 of file compile.c.

Referenced by iseq_setup(), and verify_list().

◆ COMPILE_ERROR

#define COMPILE_ERROR (   strs)
Value:
{ \
VALUE tmp = GET_THREAD()->errinfo; \
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; \
}
void rb_compile_bug(const char *file, int line, const char *fmt,...)
Definition: error.c:395
#define compile_debug
Definition: compile.c:95
static rb_thread_t * GET_THREAD(void)
Definition: vm_core.h:929

Definition at line 275 of file compile.c.

Referenced by iseq_compile_each(), and validate_label().

◆ COMPILE_NG

#define COMPILE_NG   0

Definition at line 291 of file compile.c.

Referenced by iseq_compile_each().

◆ COMPILE_OK

#define COMPILE_OK   1

◆ COMPILE_POPED

#define COMPILE_POPED (   anchor,
  desc,
  node 
)
Value:
(debug_compile("== " desc "\n", \
iseq_compile_each(iseq, (anchor), (node), 1)))
#define debug_compile(msg, v)
Definition: compile.c:160
static int iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *anchor, NODE *n, int)
compile each node
Definition: compile.c:3253

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

◆ CPDEBUG

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

◆ debug_compile

#define debug_compile (   msg,
 
)    (v)

Definition at line 160 of file compile.c.

◆ debug_node_end

#define debug_node_end ( )    ((void)0)

Definition at line 152 of file compile.c.

Referenced by iseq_compile_each().

◆ debug_node_start

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

Definition at line 151 of file compile.c.

Referenced by iseq_compile_each().

◆ debugi

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

Definition at line 146 of file compile.c.

Referenced by compile_colon2(), and iseq_compile_each().

◆ debugp

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

Definition at line 147 of file compile.c.

◆ debugp_param

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

◆ debugp_verbose

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

Definition at line 148 of file compile.c.

◆ debugp_verbose_node

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

Definition at line 149 of file compile.c.

◆ debugs

#define debugs   if(0)printf

◆ DECL_ANCHOR

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

◆ defined_expr

#define defined_expr   defined_expr0

Definition at line 2850 of file compile.c.

Referenced by defined_expr(), and iseq_compile_each().

◆ ERROR_ARGS

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

◆ FIXNUM_INC

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

Definition at line 22 of file compile.c.

Referenced by iseq_compile_each().

◆ FIXNUM_OR

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

Definition at line 23 of file compile.c.

◆ hide_obj

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

Definition at line 301 of file compile.c.

Referenced by iseq_set_sequence().

◆ INIT_ANCHOR

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

◆ INSN_OF

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

Definition at line 271 of file compile.c.

Referenced by iseq_compile_each().

◆ iseq_absolute_path

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

◆ ISEQ_ARG

#define ISEQ_ARG

Definition at line 313 of file compile.c.

◆ ISEQ_ARG_DECLARE

#define ISEQ_ARG_DECLARE

Definition at line 314 of file compile.c.

◆ iseq_path

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

◆ MEMORY

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

◆ NEW_CHILD_ISEQVAL

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

◆ NEW_ISEQVAL

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

Referenced by iseq_compile_each().

◆ NEW_LABEL

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

◆ OPERAND_AT

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

◆ PADDING_SIZE_MAX

#define PADDING_SIZE_MAX   0

Definition at line 606 of file compile.c.

Referenced by compile_data_alloc().

◆ rb_intern

#define rb_intern (   str)    rb_intern_const(str)

◆ ruby_sourcefile

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

Definition at line 422 of file compile.c.

Referenced by validate_label().

◆ SP_INSN

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

◆ USE_INSN_STACK_INCREASE

#define USE_INSN_STACK_INCREASE   1

Definition at line 16 of file compile.c.

Typedef Documentation

◆ ADJUST

typedef struct iseq_adjust_data ADJUST

◆ INSN

typedef struct iseq_insn_data INSN

◆ LABEL

typedef struct iseq_label_data LABEL

◆ LINK_ANCHOR

typedef struct iseq_link_anchor LINK_ANCHOR

◆ LINK_ELEMENT

Enumeration Type Documentation

◆ 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

◆ ADD_ELEM()

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

◆ add_ensure_iseq()

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

◆ add_ensure_range()

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

◆ APPEND_ELEM()

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

◆ APPEND_LIST()

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

◆ build_postexe_iseq()

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

◆ calc_sp_depth()

static int calc_sp_depth ( int  depth,
INSN iobj 
)
static

Definition at line 5469 of file compile.c.

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

Referenced by iseq_set_sequence().

◆ case_when_optimizable_literal()

static VALUE case_when_optimizable_literal ( NODE node)
static

◆ cdhash_cmp()

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, T_STRING, and val.

◆ cdhash_hash()

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, and T_STRING.

◆ cdhash_set_label_i()

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

◆ CHECK_INTEGER()

static VALUE CHECK_INTEGER ( VALUE  v)
inlinestatic

Definition at line 5893 of file compile.c.

References NUM2LONG.

Referenced by rb_iseq_build_from_ary().

◆ compile_array()

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_(), iseq_catch_table_entry::iseq, and type.

Referenced by iseq_compile_each(), and setup_args().

◆ compile_array_()

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

◆ compile_branch_condition()

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

◆ compile_colon2()

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

◆ compile_cpath()

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

◆ compile_data_alloc()

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

◆ compile_data_alloc_adjust()

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

◆ compile_data_alloc_insn()

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

◆ compile_data_alloc_label()

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

◆ compile_dregx()

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

◆ compile_dstr()

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

◆ compile_dstr_fragments()

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

◆ compile_massign()

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

◆ compile_massign_lhs()

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

◆ compile_massign_opt()

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

◆ compile_massign_opt_lhs()

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

◆ defined_expr()

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

◆ dump_disasm_list()

static void dump_disasm_list ( LINK_ELEMENT elem)
static

◆ FIRST_ELEMENT()

static LINK_ELEMENT* FIRST_ELEMENT ( LINK_ANCHOR anchor)
static

◆ get_destination_insn()

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

◆ get_dyna_var_idx()

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

◆ get_dyna_var_idx_at_raw()

static int get_dyna_var_idx_at_raw ( rb_iseq_t iseq,
ID  id 
)
static

◆ get_exception_sym2type()

static VALUE get_exception_sym2type ( VALUE  sym)
static

◆ get_local_var_idx()

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

◆ get_lvar_level()

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

◆ get_next_insn()

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

◆ get_prev_insn()

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

◆ INSERT_ELEM_NEXT()

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

◆ INSERT_LIST()

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

◆ insn_data_length()

static int insn_data_length ( INSN iobj)
static

Definition at line 5463 of file compile.c.

References iseq_insn_data::insn_id.

Referenced by dump_disasm_list(), and iseq_set_sequence().

◆ insn_data_to_s_detail()

static VALUE insn_data_to_s_detail ( INSN iobj)
static

◆ insn_make_insn_table()

static struct st_table* insn_make_insn_table ( void  )
static

Definition at line 5714 of file compile.c.

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

Referenced by iseq_build_from_ary_body().

◆ insn_set_specialized_instruction()

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

◆ iseq_add_mark_object()

static int iseq_add_mark_object ( rb_iseq_t iseq,
VALUE  v 
)
static

◆ iseq_add_mark_object_compile_time()

static int iseq_add_mark_object_compile_time ( rb_iseq_t iseq,
VALUE  v 
)
static

◆ 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

◆ iseq_build_from_ary_exception()

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

◆ iseq_build_load_iseq()

static VALUE iseq_build_load_iseq ( rb_iseq_t iseq,
VALUE  op 
)
static

◆ iseq_compile_each()

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_CALL_WITH_BLOCK, 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_keyword, rb_iseq_struct::arg_keyword_table, rb_iseq_struct::arg_keywords, 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, ensure_range::begin, build_postexe_iseq(), cdhash_type, cnt, COMPILE, COMPILE_, compile_array(), compile_array_(), COMPILE_ARRAY_TYPE_ARRAY, COMPILE_ARRAY_TYPE_HASH, compile_branch_condition(), compile_colon2(), compile_cpath(), rb_iseq_struct::compile_data, compile_dregx(), compile_dstr(), COMPILE_ERROR, compile_massign(), COMPILE_NG, COMPILE_OK, COMPILE_POPED, CONST_ID, iseq_compile_data::current_block, debug_node_end, debug_node_start, debugi, debugp_param, debugs, DECL_ANCHOR, DEFAULT_SPECIAL_VAR_COUNT, DEFINED_CONST, defined_expr, DEFINED_NIL, 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, rb_iseq_struct::flip_cnt, get_dyna_var_idx(), get_local_var_idx(), get_lvar_level(), head, RNode::id, ID2SYM, id_core_define_method, id_core_define_singleton_method, id_core_hash_merge_ptr, id_core_set_method_alias, id_core_set_variable_alias, id_core_undef_method, idAREF, idASET, idBackquote, idEqTilde, INIT_ANCHOR, rb_compile_option_struct::inline_const_cache, INSN_OF, INT2FIX, rb_iseq_struct::is_size, iseq_add_mark_object(), key, rb_iseq_location_struct::label, iseq_link_anchor::last, iseq_compile_data::last_line, level, list, LIST_SIZE_ZERO(), 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_callinfo(), NEW_CHILD_ISEQVAL, NEW_IFUNC, NEW_ISEQVAL, NEW_LABEL, NEW_NODE, ensure_range::next, RNode::node, NODE_ALIAS, NODE_AND, NODE_ARGSCAT, NODE_ARGSPUSH, NODE_ARRAY, NODE_ATTRASGN, NODE_BACK_REF, NODE_BEGIN, NODE_BLOCK, NODE_BLOCK_PASS, NODE_BREAK, NODE_CALL, NODE_CASE, NODE_CDECL, NODE_CLASS, NODE_COLON2, NODE_COLON3, NODE_CONST, NODE_CVAR, NODE_CVASGN, NODE_DASGN, NODE_DASGN_CURR, NODE_DEFINED, NODE_DEFN, NODE_DEFS, NODE_DOT2, NODE_DOT3, NODE_DREGX, NODE_DREGX_ONCE, NODE_DSTR, NODE_DSYM, NODE_DVAR, NODE_DXSTR, NODE_ENSURE, NODE_ERRINFO, NODE_EVSTR, NODE_FALSE, NODE_FCALL, NODE_FL_NEWLINE, NODE_FLIP2, NODE_FLIP3, NODE_FOR, NODE_GASGN, NODE_GVAR, NODE_HASH, NODE_IASGN, NODE_IASGN2, NODE_IF, NODE_ITER, NODE_IVAR, NODE_KW_ARG, NODE_LAMBDA, NODE_LASGN, NODE_LIT, NODE_LVAR, NODE_MASGN, NODE_MATCH, NODE_MATCH2, NODE_MATCH3, NODE_MODULE, NODE_NEXT, NODE_NIL, NODE_NTH_REF, NODE_OP_ASGN1, NODE_OP_ASGN2, NODE_OP_ASGN_AND, NODE_OP_ASGN_OR, NODE_OP_CDECL, NODE_OPT_N, NODE_OR, NODE_POSTEXE, NODE_PRELUDE, NODE_REDO, NODE_RESBODY, NODE_RESCUE, NODE_RETRY, NODE_RETURN, NODE_SCLASS, NODE_SCOPE, NODE_SELF, NODE_SPLAT, NODE_STR, NODE_SUPER, NODE_TRUE, NODE_UNDEF, NODE_UNTIL, NODE_VALIAS, NODE_VALUES, NODE_VCALL, NODE_WHEN, NODE_WHILE, NODE_XSTR, NODE_YIELD, NODE_ZARRAY, NODE_ZSUPER, NULL, OPERAND_AT, iseq_compile_data::option, rb_iseq_struct::parent_iseq, POP_ELEMENT(), iseq_label_data::position, iseq_compile_data_ensure_node_stack::prev, push_ensure_entry(), Qfalse, Qtrue, Qundef, rb_bug(), rb_cObject, rb_eStandardError, rb_fstring(), rb_hash_new(), rb_hash_tbl_raw(), rb_id2name(), rb_id2str(), rb_intern, rb_is_const_id(), rb_iseq_defined_string(), rb_sprintf(), rb_str_concat(), rb_str_new2, iseq_compile_data::redo_label, RUBY_EVENT_LINE, RUBY_EVENT_RETURN, ruby_node_name(), setup_args(), rb_compile_option_struct::specialized_instruction, st_data_t, st_init_numtable(), st_insert(), st_lookup(), iseq_compile_data::start_label, SYM2ID, SYMBOL_P, rb_compile_option_struct::tailcall_optimization, st_table::type, type, rb_iseq_struct::type, RNode::u1, RNode::u2, RNode::u3, val, RNode::value, VM_CALL_ARGS_BLOCKARG, VM_CALL_ARGS_SPLAT, VM_CALL_FCALL, VM_CALL_SUPER, VM_CALL_VCALL, VM_CHECKMATCH_ARRAY, VM_CHECKMATCH_TYPE_CASE, VM_CHECKMATCH_TYPE_RESCUE, VM_CHECKMATCH_TYPE_WHEN, VM_DEFINECLASS_FLAG_HAS_SUPERCLASS, VM_DEFINECLASS_FLAG_SCOPED, VM_DEFINECLASS_TYPE_CLASS, VM_DEFINECLASS_TYPE_MODULE, VM_DEFINECLASS_TYPE_SINGLETON_CLASS, VM_SPECIAL_OBJECT_CBASE, VM_SPECIAL_OBJECT_CONST_BASE, VM_SPECIAL_OBJECT_VMCORE, and when_vals().

◆ iseq_insns_unification()

static int iseq_insns_unification ( rb_iseq_t iseq,
LINK_ANCHOR anchor 
)
static

◆ iseq_optimize()

static int iseq_optimize ( rb_iseq_t iseq,
LINK_ANCHOR anchor 
)
static

◆ iseq_peephole_optimize()

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

◆ iseq_set_arguments()

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

◆ iseq_set_exception_local_table()

static int iseq_set_exception_local_table ( rb_iseq_t iseq)
static

◆ iseq_set_exception_table()

static int iseq_set_exception_table ( rb_iseq_t iseq)
static

◆ iseq_set_local_table()

static int iseq_set_local_table ( rb_iseq_t iseq,
ID tbl 
)
static

◆ iseq_set_optargs_table()

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

◆ iseq_set_sequence()

static int iseq_set_sequence ( rb_iseq_t iseq,
LINK_ANCHOR anchor 
)
static

◆ iseq_set_sequence_stackcaching()

static int iseq_set_sequence_stackcaching ( rb_iseq_t iseq,
LINK_ANCHOR anchor 
)
static

◆ iseq_setup()

static int iseq_setup ( rb_iseq_t iseq,
LINK_ANCHOR anchor 
)
static

◆ iseq_specialized_instruction()

static int iseq_specialized_instruction ( rb_iseq_t iseq,
INSN iobj 
)
static

◆ label_get_position()

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

◆ label_get_sp()

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

◆ LIST_SIZE_ZERO()

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 iseq_compile_each(), and setup_args().

◆ make_name_for_block()

static VALUE make_name_for_block ( rb_iseq_t iseq)
static

◆ new_adjust_body()

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

◆ new_callinfo()

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

◆ new_child_iseq()

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

◆ new_insn_body()

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 argc, argv, compile_data_alloc(), new_insn_core(), and va_init_list.

Referenced by iseq_set_sequence_stackcaching().

◆ new_insn_core()

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

◆ 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 argc, compile_data_alloc(), FIX2INT, new_callinfo(), new_insn_core(), and SYM2ID.

◆ new_label_body()

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

◆ opobj_inspect()

static VALUE opobj_inspect ( VALUE  obj)
static

◆ POP_ELEMENT()

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(), and iseq_compile_each().

◆ push_ensure_entry()

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

◆ r_id()

static ID r_id ( ID  id)
inlinestatic

Definition at line 135 of file compile.c.

References id.

◆ r_value()

static VALUE r_value ( VALUE  value)
inlinestatic

Definition at line 141 of file compile.c.

◆ rb_dvar_defined()

int rb_dvar_defined ( ID  id)

◆ rb_insns_name()

const char* rb_insns_name ( int  i)

Definition at line 5612 of file compile.c.

◆ rb_insns_name_array()

VALUE rb_insns_name_array ( void  )

Definition at line 5618 of file compile.c.

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

Referenced by Init_VM().

◆ rb_iseq_build_from_ary()

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

◆ rb_iseq_compile_node()

VALUE rb_iseq_compile_node ( VALUE  self,
NODE node 
)

◆ rb_iseq_translate_threaded_code()

int rb_iseq_translate_threaded_code ( rb_iseq_t iseq)

◆ rb_local_defined()

int rb_local_defined ( ID  id)

◆ rb_parse_in_eval()

int rb_parse_in_eval ( void  )

Definition at line 6014 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().

◆ rb_parse_in_main()

int rb_parse_in_main ( void  )

Definition at line 6020 of file compile.c.

References GET_THREAD(), and rb_thread_struct::parse_in_eval.

Referenced by yyparse().

◆ register_label()

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

◆ REMOVE_ELEM()

static void REMOVE_ELEM ( LINK_ELEMENT elem)
static

◆ REPLACE_ELEM()

static void REPLACE_ELEM ( LINK_ELEMENT elem1,
LINK_ELEMENT elem2 
)
static

◆ setup_args()

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

◆ validate_label()

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

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

◆ verify_list()

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

◆ when_vals()

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

Variable Documentation

◆ cdhash_type

const struct st_hash_type cdhash_type
static
Initial value:
= {
}
static int cdhash_cmp(VALUE val, VALUE lit)
Definition: compile.c:1392
static st_index_t cdhash_hash(VALUE a)
Definition: compile.c:1408

Definition at line 1418 of file compile.c.

Referenced by iseq_compile_each().