#include "ruby/ruby.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 |
Defines | |
| #define | USE_INSN_STACK_INCREASE 1 |
| #define | numberof(array) (int)(sizeof(array) / sizeof((array)[0])) |
| #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_filename(iseq) (((rb_iseq_t*)DATA_PTR(iseq))->filename) |
| #define | iseq_filepath(iseq) (((rb_iseq_t*)DATA_PTR(iseq))->filepath) |
| #define | NEW_ISEQVAL(node, name, type, line_no) new_child_iseq(iseq, node, name, 0, type, line_no) |
| #define | NEW_CHILD_ISEQVAL(node, name, type, line_no) new_child_iseq(iseq, node, 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_INSNL(seq, line, insn, label) |
| #define | ADD_INSN1(seq, line, insn, op1) |
| #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, putnil) |
| #define | ADD_CALL(seq, line, id, argc) ADD_SEND_R(seq, line, id, argc, (VALUE)Qfalse, (VALUE)INT2FIX(VM_CALL_FCALL_BIT)) |
| #define | ADD_CALL_WITH_BLOCK(seq, line, id, argc, block) ADD_SEND_R(seq, line, id, argc, block, (VALUE)INT2FIX(VM_CALL_FCALL_BIT)) |
| #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 | 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(obj)->klass = 0;} while (0) |
| #define | ISEQ_ARG |
| #define | ISEQ_ARG_DECLARE |
| #define | ruby_sourcefile RSTRING_PTR(iseq->filename) |
| #define | MEMORY(v) |
| #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 |
Functions | |
| NORETURN (PRINTF_ARGS(void rb_compile_bug(const char *, int, const char *,...), 3, 4)) | |
| 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 | insn_data_line_no (INSN *iobj) |
| static int | calc_sp_depth (int depth, INSN *iobj) |
| static void | ADD_ELEM (ISEQ_ARG_DECLARE LINK_ANCHOR *anchor, LINK_ELEMENT *elem) |
| static INSN * | new_insn_body (rb_iseq_t *iseq, int line_no, int insn_id, int argc,...) |
| static LABEL * | new_label_body (rb_iseq_t *iseq, long line) |
| static ADJUST * | new_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 array -> 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 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) |
| 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 INSN * | compile_data_alloc_insn (rb_iseq_t *iseq) |
| static LABEL * | compile_data_alloc_label (rb_iseq_t *iseq) |
| static ADJUST * | compile_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_ELEMENT * | FIRST_ELEMENT (LINK_ANCHOR *anchor) |
| static LINK_ELEMENT * | POP_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 INSN * | new_insn_core (rb_iseq_t *iseq, int line_no, int insn_id, int argc, VALUE *argv) |
| static INSN * | new_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, VALUE type, int line_no) |
| 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 | label_get_position (LABEL *lobj) |
| static int | label_get_sp (LABEL *lobj) |
| static LINK_ELEMENT * | get_destination_insn (INSN *iobj) |
| static LINK_ELEMENT * | get_next_insn (INSN *iobj) |
| static LINK_ELEMENT * | get_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, VALUE opt_p, int poped) |
| static VALUE | compile_array (rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *node_root, VALUE opt_p) |
| static VALUE | case_when_optimizable_literal (NODE *node) |
| static VALUE | when_vals (rb_iseq_t *iseq, LINK_ANCHOR *cond_seq, NODE *vals, LABEL *l1, VALUE special_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, unsigned long *flag) |
| static VALUE | insn_data_to_s_detail (INSN *iobj) |
| VALUE | rb_insns_name_array (void) |
| static LABEL * | register_label (rb_iseq_t *iseq, struct st_table *labels_table, VALUE obj) |
| static VALUE | get_exception_sym2type (VALUE sym) |
| static int | iseq_build_exception (rb_iseq_t *iseq, struct st_table *labels_table, VALUE exception) |
| static struct st_table * | insn_make_insn_table (void) |
| static int | iseq_build_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 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_CALL_RECEIVER | ( | seq, | |||
| line | ) | ADD_INSN(seq, line, putnil) |
| #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, \ iseqv, (VALUE)(lc) | 1)))
Definition at line 248 of file compile.c.
Referenced by defined_expr(), iseq_build_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 186 of file compile.c.
Referenced by compile_colon2(), compile_massign(), compile_massign_lhs(), compile_massign_opt(), defined_expr(), iseq_compile_each(), rb_iseq_compile_node(), and setup_args().
| #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 195 of file compile.c.
Referenced by 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 199 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 203 of file compile.c.
Referenced by defined_expr(), and iseq_compile_each().
| #define ADD_INSNL | ( | seq, | |||
| line, | |||||
| insn, | |||||
| label | ) |
Value:
ADD_ELEM(seq, (LINK_ELEMENT *) \ new_insn_body(iseq, line, BIN(insn), 1, (VALUE)label))
Definition at line 190 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 239 of file compile.c.
Referenced by add_ensure_iseq(), compile_branch_condition(), defined_expr(), iseq_build_body(), iseq_compile_each(), iseq_set_arguments(), and rb_iseq_compile_node().
Value:
ADD_ELEM(seq, (LINK_ELEMENT *) \ new_insn_send(iseq, line, \ (VALUE)id, (VALUE)argc, (VALUE)block, (VALUE)flag))
Definition at line 220 of file compile.c.
Referenced by iseq_compile_each().
| #define ADD_SEQ | ( | seq1, | |||
| seq2 | ) | APPEND_LIST(seq1, seq2) |
Definition at line 182 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_PTR(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 225 of file compile.c.
Referenced by iseq_compile_each(), and rb_iseq_compile_node().
| #define BUFSIZE 0x100 |
Definition at line 2770 of file compile.c.
Referenced by inspect1(), inspect2(), and strscan_inspect().
| #define CHECK_ARRAY | ( | v | ) | rb_convert_type(v, T_ARRAY, "Array", "to_ary") |
| #define CHECK_STRING | ( | v | ) | rb_convert_type(v, T_STRING, "String", "to_str") |
| #define CHECK_SYMBOL | ( | v | ) | rb_convert_type(v, T_SYMBOL, "Symbol", "to_sym") |
| #define COMPILE | ( | anchor, | |||
| desc, | |||||
| node | ) |
Value:
(debug_compile("== " desc "\n", \ iseq_compile_each(iseq, anchor, node, 0)))
Definition at line 255 of file compile.c.
Referenced by compile_branch_condition(), compile_colon2(), compile_cpath(), compile_dstr_fragments(), compile_massign(), compile_massign_opt(), defined_expr(), iseq_compile_each(), 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 265 of file compile.c.
Referenced by compile_array_(), and iseq_compile_each().
| #define compile_debug CPDEBUG |
| #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; \
iseq->compile_data->err_info = GET_THREAD()->errinfo; \
GET_THREAD()->errinfo = tmp; \
ret = 0; \
break; \
}
Definition at line 276 of file compile.c.
Referenced by iseq_compile_each().
| #define COMPILE_NG 0 |
| #define COMPILE_OK 1 |
Definition at line 291 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_body(), iseq_build_exception(), iseq_compile_each(), iseq_insns_unification(), 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(), 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 260 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 |
| #define debug_node_end | ( | ) | ((void)0) |
| #define debug_node_start | ( | node | ) | ((void)0) |
| #define debugp_param | ( | header, | |||
| value | ) | r_value(value) |
Definition at line 151 of file compile.c.
Referenced by compile_dstr_fragments(), and iseq_compile_each().
| #define debugp_verbose_node | ( | header, | |||
| value | ) | r_value(value) |
| #define debugs if(0)printf |
Definition at line 161 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 297 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 ERROR_ARGS ruby_sourcefile, nd_line(node), |
Definition at line 288 of file compile.c.
Referenced by iseq_compile_each(), and rb_iseq_compile_node().
| #define FIXNUM_INC | ( | n, | |||
| i | ) | ((n)+(INT2FIX(i)&~FIXNUM_FLAG)) |
Definition at line 21 of file compile.c.
Referenced by compile_massign_lhs(), and iseq_compile_each().
| #define FIXNUM_OR | ( | n, | |||
| i | ) | ((n)|INT2FIX(i)) |
| #define hide_obj | ( | obj | ) | do {OBJ_FREEZE(obj); RBASIC(obj)->klass = 0;} while (0) |
Definition at line 302 of file compile.c.
Referenced by check_exec_env_i(), check_exec_redirect(), compile_dstr_fragments(), defined_expr(), iseq_compile_each(), iseq_set_sequence(), rb_check_exec_env(), rb_exec_arg_addopt(), rb_exec_fillarg(), rb_run_exec_options_err(), run_exec_rlimit(), save_env(), save_env_i(), and save_redirect_fd().
Definition at line 299 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) |
| #define iseq_filename | ( | iseq | ) | (((rb_iseq_t*)DATA_PTR(iseq))->filename) |
| #define iseq_filepath | ( | iseq | ) | (((rb_iseq_t*)DATA_PTR(iseq))->filepath) |
| #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().
| #define NEW_LABEL | ( | l | ) | new_label_body(iseq, l) |
Definition at line 167 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 numberof | ( | array | ) | (int)(sizeof(array) / sizeof((array)[0])) |
Definition at line 20 of file compile.c.
Referenced by compile_massign_opt(), etc_systmpdir(), init_case_fold_table(), init_env(), Init_ossl_ssl(), math_gamma(), mt_state(), new_size(), onigenc_unicode_apply_all_case_fold(), ossl_pkcs7_sym2typeid(), ossl_sslctx_initialize(), ossl_sslctx_set_ssl_version(), parser_magic_comment(), rand_init(), random_copy(), random_load(), rb_f_select(), rb_insns_name_array(), rb_str_upto(), rb_struct_new(), rb_w32_system_tmpdir(), and ruby_cleanup().
| #define OPERAND_AT | ( | insn, | |||
| idx | ) | (((INSN*)(insn))->operands[idx]) |
Definition at line 269 of file compile.c.
Referenced by get_destination_insn(), insn_data_to_s_detail(), iseq_compile_each(), iseq_peephole_optimize(), and iseq_specialized_instruction().
| #define rb_intern | ( | str | ) | rb_intern_const(str) |
| #define ruby_sourcefile RSTRING_PTR(iseq->filename) |
Definition at line 411 of file compile.c.
Referenced by e_option_supplied(), gettable_gen(), parser_set_encode(), parser_warn(), parser_warning(), reg_compile_gen(), token_info_pop(), yycompile(), and yycompile0().
| 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 |
| static void ADD_ELEM | ( | ISEQ_ARG_DECLARE LINK_ANCHOR * | anchor, | |
| LINK_ELEMENT * | elem | |||
| ) | [static] |
Definition at line 391 of file compile.c.
References iseq_link_element::next, iseq_link_element::prev, and verify_list().
Referenced by compile_massign_lhs(), and iseq_build_body().
| static void add_ensure_iseq | ( | LINK_ANCHOR * | ret, | |
| rb_iseq_t * | iseq, | |||
| int | is_return | |||
| ) | [static] |
Definition at line 2825 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 2807 of file compile.c.
References ensure_range::begin, compile_data_alloc(), ensure_range::end, ne, and ensure_range::next.
Referenced by add_ensure_iseq().
| static void APPEND_LIST | ( | ISEQ_ARG_DECLARE LINK_ANCHOR * | anc1, | |
| LINK_ANCHOR * | anc2 | |||
| ) | [static] |
Definition at line 716 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 int calc_sp_depth | ( | int | depth, | |
| INSN * | iobj | |||
| ) | [static] |
Definition at line 5000 of file compile.c.
References iseq_insn_data::insn_id, and iseq_insn_data::operands.
Referenced by iseq_set_sequence().
Definition at line 2305 of file compile.c.
References nd_type, NODE_LIT, NODE_STR, Qfalse, rb_cNumeric, rb_obj_is_kind_of(), and SYMBOL_P.
Referenced by when_vals().
Definition at line 1226 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 1242 of file compile.c.
References FIX2LONG, rb_hash(), rb_str_hash(), SPECIAL_CONST_P, T_STRING, and TYPE.
Definition at line 5362 of file compile.c.
References NUM2LONG().
Referenced by rb_iseq_build_from_ary().
| static VALUE compile_array | ( | rb_iseq_t * | iseq, | |
| LINK_ANCHOR * | ret, | |||
| NODE * | node_root, | |||
| VALUE | opt_p | |||
| ) | [static] |
Definition at line 2299 of file compile.c.
References compile_array_().
Referenced by iseq_compile_each(), and setup_args().
| static int compile_array_ | ( | rb_iseq_t * | iseq, | |
| LINK_ANCHOR * | ret, | |||
| NODE * | node_root, | |||
| VALUE | opt_p, | |||
| int | poped | |||
| ) | [static] |
Definition at line 2244 of file compile.c.
References ADD_INSN1, APPEND_LIST(), COMPILE_, DECL_ANCHOR, INIT_ANCHOR, INT2FIX, iseq_add_mark_object_compile_time(), len, nd_line, nd_type, NODE_ARRAY, NODE_LIT, NODE_ZARRAY, OBJ_FREEZE, Qfalse, Qtrue, rb_ary_push(), rb_ary_tmp_new(), rb_bug(), and ruby_node_name().
Referenced by compile_array(), and iseq_compile_each().
| static int compile_branch_condition | ( | rb_iseq_t * | iseq, | |
| LINK_ANCHOR * | ret, | |||
| NODE * | cond, | |||
| LABEL * | then_label, | |||
| LABEL * | else_label | |||
| ) | [static] |
| static int compile_colon2 | ( | rb_iseq_t * | iseq, | |
| NODE * | node, | |||
| LINK_ANCHOR * | pref, | |||
| LINK_ANCHOR * | body | |||
| ) | [static] |
Definition at line 2523 of file compile.c.
References ADD_INSN, ADD_INSN1, COMPILE, COMPILE_OK, debugi, ID2SYM, nd_line, nd_type, NODE_COLON2, NODE_COLON3, NODE_CONST, and rb_cObject.
Referenced by iseq_compile_each().
| static VALUE compile_cpath | ( | LINK_ANCHOR * | ret, | |
| rb_iseq_t * | iseq, | |||
| NODE * | cpath | |||
| ) | [static] |
Definition at line 2550 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 542 of file compile.c.
References ALLOC_N, iseq_compile_data_storage::buff, rb_iseq_struct::compile_data, iseq_compile_data_storage::next, 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_body(), new_insn_body(), and new_insn_send().
Definition at line 584 of file compile.c.
References compile_data_alloc().
Referenced by new_adjust_body().
Definition at line 572 of file compile.c.
References compile_data_alloc().
Referenced by new_insn_core().
Definition at line 578 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 2190 of file compile.c.
References ADD_INSN2, cnt, compile_dstr_fragments(), COMPILE_OK, INT2FIX, and nd_line.
Referenced by iseq_compile_each().
| static int compile_dstr | ( | rb_iseq_t * | iseq, | |
| LINK_ANCHOR * | ret, | |||
| NODE * | node | |||
| ) | [static] |
Definition at line 2181 of file compile.c.
References ADD_INSN1, cnt, compile_dstr_fragments(), COMPILE_OK, INT2FIX, and nd_line.
Referenced by iseq_compile_each().
| static int compile_dstr_fragments | ( | rb_iseq_t * | iseq, | |
| LINK_ANCHOR * | ret, | |||
| NODE * | node, | |||
| int * | cntp | |||
| ) | [static] |
Definition at line 2157 of file compile.c.
References ADD_INSN1, cnt, COMPILE, COMPILE_OK, debugp_param, hide_obj, nd_line, and NIL_P.
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 2465 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, nd_line, nd_type, and NODE_POSTARG.
Referenced by iseq_compile_each().
| static int compile_massign_lhs | ( | rb_iseq_t * | iseq, | |
| LINK_ANCHOR * | ret, | |||
| NODE * | node | |||
| ) | [static] |
Definition at line 2349 of file compile.c.
References ADD_ELEM(), ADD_INSN, ADD_INSN1, ADD_SEQ, COMPILE_OK, COMPILE_POPED, DECL_ANCHOR, FIRST_ELEMENT(), FIXNUM_INC, INIT_ANCHOR, nd_line, nd_type, NODE_ATTRASGN, NODE_MASGN, iseq_insn_data::operands, POP_ELEMENT(), and REMOVE_ELEM().
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 2400 of file compile.c.
References ADD_INSN, COMPILE, compile_massign_opt_lhs(), COMPILE_POPED, MEMORY, nd_line, nd_type, NODE_ARRAY, NODE_CVASGN, NODE_DASGN, NODE_DASGN_CURR, NODE_IASGN, NODE_IASGN2, NODE_LASGN, and numberof.
Referenced by compile_massign().
| static void compile_massign_opt_lhs | ( | rb_iseq_t * | iseq, | |
| LINK_ANCHOR * | ret, | |||
| NODE * | lhsn | |||
| ) | [static] |
Definition at line 2391 of file compile.c.
References compile_massign_lhs().
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 2571 of file compile.c.
References ADD_CATCH_ENTRY, ADD_INSN, ADD_INSN1, ADD_INSN3, ADD_INSNL, ADD_LABEL, CATCH_TYPE_RESCUE, COMPILE, DEFINED_CONST, DEFINED_CVAR, DEFINED_FUNC, DEFINED_GVAR, DEFINED_IVAR, DEFINED_METHOD, DEFINED_REF, DEFINED_YIELD, DEFINED_ZSUPER, FALSE, hide_obj, RNode::id, ID2SYM, INT2FIX, iseq_add_mark_object_compile_time(), ISEQ_TYPE_DEFINED_GUARD, rb_iseq_struct::name, nd_line, nd_type, NEW_CHILD_ISEQVAL, NEW_LABEL, NEW_NIL, 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_VCALL, NODE_YIELD, NODE_ZARRAY, NODE_ZSUPER, NULL, Qfalse, Qtrue, rb_cObject, rb_is_const_id(), rb_str_concat(), rb_str_new2, TRUE, and type.
Referenced by iseq_compile_each().
| static void dump_disasm_list | ( | LINK_ELEMENT * | elem | ) | [static] |
Definition at line 5076 of file compile.c.
References FIX2LONG, insn_data_length(), insn_data_line_no(), insn_data_to_s_detail(), iseq_adjust_data::label, iseq_label_data::label_no, iseq_link_element::next, rb_eSyntaxError, rb_raise(), StringValueCStr, and iseq_link_element::type.
Referenced by iseq_set_sequence(), and iseq_setup().
| static LINK_ELEMENT* FIRST_ELEMENT | ( | LINK_ANCHOR * | anchor | ) | [static] |
Definition at line 645 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 1623 of file compile.c.
References iseq_label_data::link, iseq_link_element::next, OPERAND_AT, and iseq_link_element::type.
Referenced by iseq_peephole_optimize().
Definition at line 1021 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().
Definition at line 996 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().
Definition at line 5151 of file compile.c.
References CATCH_TYPE_BREAK, CATCH_TYPE_ENSURE, CATCH_TYPE_NEXT, CATCH_TYPE_REDO, CATCH_TYPE_RESCUE, CATCH_TYPE_RETRY, ID2SYM, rb_eSyntaxError, rb_inspect(), rb_intern, rb_raise(), and RSTRING_PTR.
Referenced by iseq_build_exception().
Definition at line 1009 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 LINK_ELEMENT* get_next_insn | ( | INSN * | iobj | ) | [static] |
Definition at line 1639 of file compile.c.
References iseq_insn_data::link, iseq_link_element::next, and iseq_link_element::type.
Referenced by iseq_peephole_optimize().
| static LINK_ELEMENT* get_prev_insn | ( | INSN * | iobj | ) | [static] |
Definition at line 1653 of file compile.c.
References iseq_insn_data::link, iseq_link_element::prev, and iseq_link_element::type.
Referenced by iseq_peephole_optimize().
| static void INSERT_ELEM_NEXT | ( | LINK_ELEMENT * | elem1, | |
| LINK_ELEMENT * | elem2 | |||
| ) | [static] |
Definition at line 593 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 737 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 4994 of file compile.c.
References iseq_insn_data::insn_id.
Referenced by dump_disasm_list(), and iseq_set_sequence().
| static int insn_data_line_no | ( | INSN * | iobj | ) | [static] |
Definition at line 5006 of file compile.c.
References iseq_insn_data::line_no.
Referenced by dump_disasm_list().
Definition at line 5012 of file compile.c.
References FIX2INT, rb_global_entry::id, iseq_insn_data::insn_id, iseq_label_data::label_no, OPERAND_AT, iseq_insn_data::operands, PRIxVALUE, Qnil, rb_eSyntaxError, rb_id2name(), rb_inspect(), rb_raise(), rb_sprintf(), rb_str_cat2(), rb_str_catf(), rb_str_concat(), rb_iseq_struct::self, and type.
Referenced by dump_disasm_list().
| static struct st_table* insn_make_insn_table | ( | void | ) | [static, read] |
Definition at line 5214 of file compile.c.
References ID2SYM, rb_intern, st_init_numtable, and st_insert.
Referenced by iseq_build_body().
Definition at line 1784 of file compile.c.
References compile_data_alloc(), COMPILE_OK, rb_iseq_struct::ic_size, iseq_insn_data::insn_id, INT2FIX, iseq_insn_data::operand_size, and iseq_insn_data::operands.
Referenced by iseq_specialized_instruction().
Definition at line 403 of file compile.c.
References COMPILE_OK, rb_iseq_struct::mark_ary, rb_ary_push(), and SPECIAL_CONST_P.
Referenced by iseq_build_body(), iseq_set_exception_table(), iseq_set_sequence(), and new_child_iseq().
Definition at line 414 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_(), defined_expr(), iseq_build_body(), and iseq_compile_each().
| static int iseq_build_body | ( | rb_iseq_t * | iseq, | |
| LINK_ANCHOR * | anchor, | |||
| VALUE | body, | |||
| struct st_table * | labels_table | |||
| ) | [static] |
Definition at line 5228 of file compile.c.
References ADD_ELEM(), ADD_LABEL, argv, CLASS_OF, compile_data_alloc(), COMPILE_OK, rb_iseq_struct::filename, FIXNUM_P, rb_iseq_struct::ic_size, insn_make_insn_table(), iseq_add_mark_object(), iseq_add_mark_object_compile_time(), iseq_setup(), len, new_insn_core(), NUM2INT, Qnil, RARRAY_LEN, RARRAY_LENINT, RARRAY_PTR, rb_ary_dup(), rb_ary_entry(), rb_ary_store(), rb_cISeq, rb_compile_error(), rb_convert_type(), rb_eSyntaxError, rb_eTypeError, RB_GC_GUARD, rb_global_entry(), rb_inspect(), rb_iseq_load(), rb_raise(), register_label(), RSTRING_PTR, rb_iseq_struct::self, st_free_table, st_lookup, SYM2ID, SYMBOL_P, T_ARRAY, T_SYMBOL, and TYPE.
Referenced by rb_iseq_build_from_ary().
| static int iseq_build_exception | ( | rb_iseq_t * | iseq, | |
| struct st_table * | labels_table, | |||
| VALUE | exception | |||
| ) | [static] |
Definition at line 5179 of file compile.c.
References ADD_CATCH_ENTRY, COMPILE_OK, get_exception_sym2type(), NUM2INT, Qnil, RARRAY_LEN, RARRAY_PTR, rb_convert_type(), rb_eSyntaxError, RB_GC_GUARD, rb_iseq_load(), rb_raise(), register_label(), rb_iseq_struct::self, T_ARRAY, and type.
Referenced by rb_iseq_build_from_ary().
| 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 2954 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_opts, rb_iseq_struct::arg_post_len, rb_iseq_struct::arg_post_start, rb_iseq_struct::arg_rest, rb_iseq_struct::arg_simple, rb_iseq_struct::argc, ensure_range::begin, CATCH_TYPE_BREAK, CATCH_TYPE_ENSURE, CATCH_TYPE_NEXT, CATCH_TYPE_REDO, CATCH_TYPE_RESCUE, CATCH_TYPE_RETRY, COMPILE, COMPILE_, compile_array(), compile_array_(), 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, 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, FIXNUM_INC, RNode::flags, iseq_compile_data::flip_cnt, get_dyna_var_idx(), get_local_var_idx(), hide_obj, rb_iseq_struct::ic_size, RNode::id, ID2SYM, id_core_define_method, id_core_define_singleton_method, id_core_set_method_alias, id_core_set_postexe, id_core_set_variable_alias, id_core_undef_method, idAREF, idASET, idBackquote, idEqq, idEqTilde, INIT_ANCHOR, rb_compile_option_struct::inline_const_cache, INSN_OF, INT2FIX, iseq_add_mark_object_compile_time(), ISEQ_TYPE_BLOCK, ISEQ_TYPE_CLASS, ISEQ_TYPE_ENSURE, ISEQ_TYPE_EVAL, ISEQ_TYPE_METHOD, ISEQ_TYPE_RESCUE, ISEQ_TYPE_TOP, iseq_compile_data::last_line, LIST_SIZE_ZERO(), rb_iseq_struct::local_iseq, rb_iseq_struct::local_size, LONG2FIX, iseq_compile_data::loopval_popped, make_name_for_block(), rb_iseq_struct::name, nd_line, nd_type, NEW_CHILD_ISEQVAL, NEW_ISEQVAL, NEW_LABEL, 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_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_OPT_N, NODE_OPTBLOCK, NODE_OR, NODE_POSTEXE, NODE_PRELUDE, NODE_REDO, NODE_RESBODY, NODE_RESCUE, NODE_RETRY, NODE_RETURN, NODE_SCLASS, 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, OBJ_FREEZE, OPERAND_AT, iseq_compile_data::option, rb_iseq_struct::parent_iseq, POP_ELEMENT(), iseq_compile_data_ensure_node_stack::prev, push_ensure_entry(), Qfalse, Qnil, Qtrue, Qundef, rb_ary_tmp_new(), rb_bug(), rb_cObject, rb_eStandardError, rb_hash_aref(), rb_hash_aset(), rb_id2name(), rb_id2str(), rb_is_const_id(), rb_sprintf(), rb_str_concat(), rb_str_dup(), rb_str_new2, iseq_compile_data::redo_label, RSTRING_PTR, RUBY_EVENT_LINE, RUBY_EVENT_RETURN, ruby_node_name(), setup_args(), rb_compile_option_struct::specialized_instruction, iseq_compile_data::start_label, SYMBOL_P, rb_compile_option_struct::tailcall_optimization, rb_iseq_struct::type, type, RNode::u1, RNode::u2, VM_CALL_ARGS_BLOCKARG_BIT, VM_CALL_ARGS_SPLAT_BIT, VM_CALL_FCALL_BIT, VM_CALL_VCALL_BIT, VM_SPECIAL_OBJECT_CBASE, VM_SPECIAL_OBJECT_CONST_BASE, VM_SPECIAL_OBJECT_VMCORE, and when_vals().
| static int iseq_insns_unification | ( | rb_iseq_t * | iseq, | |
| LINK_ANCHOR * | anchor | |||
| ) | [static] |
Definition at line 1945 of file compile.c.
References COMPILE_OK, FIRST_ELEMENT(), id, if(), iseq_insn_data::insn_id, iseq_insn_data::link, 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 1877 of file compile.c.
References rb_iseq_struct::compile_data, COMPILE_OK, FIRST_ELEMENT(), iseq_peephole_optimize(), iseq_specialized_instruction(), iseq_link_element::next, rb_compile_option_struct::operands_unification, iseq_compile_data::option, rb_compile_option_struct::peephole_optimization, rb_compile_option_struct::specialized_instruction, rb_compile_option_struct::tailcall_optimization, and iseq_link_element::type.
Referenced by iseq_setup().
| static int iseq_peephole_optimize | ( | rb_iseq_t * | iseq, | |
| LINK_ELEMENT * | list, | |||
| const int | do_tailcallopt | |||
| ) | [static] |
Definition at line 1667 of file compile.c.
References COMPILE_OK, FIXNUM_OR, get_destination_insn(), get_next_insn(), get_prev_insn(), INSERT_ELEM_NEXT(), iseq_insn_data::insn_id, iseq_insn_data::line_no, iseq_insn_data::link, new_insn_core(), OPERAND_AT, iseq_insn_data::operand_size, iseq_insn_data::operands, REMOVE_ELEM(), REPLACE_ELEM(), and VM_CALL_TAILCALL_BIT.
Referenced by iseq_optimize().
| static int iseq_set_arguments | ( | rb_iseq_t * | iseq, | |
| LINK_ANCHOR * | anchor, | |||
| NODE * | node | |||
| ) | [static] |
Definition at line 1044 of file compile.c.
References ADD_LABEL, 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, COMPILE_OK, COMPILE_POPED, debugs, get_dyna_var_idx_at_raw(), if(), ISEQ_TYPE_BLOCK, MEMCPY, nd_line, nd_type, NEW_LABEL, NODE_ARGS, RARRAY_PTR, rb_ary_clear(), rb_ary_push(), rb_ary_tmp_new(), rb_bug(), ruby_node_name(), and rb_iseq_struct::type.
Referenced by rb_iseq_compile_node().
| static int iseq_set_exception_local_table | ( | rb_iseq_t * | iseq | ) | [static] |
Definition at line 983 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 1552 of file compile.c.
References ALLOC_N, rb_iseq_struct::catch_table, iseq_compile_data::catch_table_ary, rb_iseq_struct::catch_table_size, CATCH_TYPE_BREAK, CATCH_TYPE_NEXT, CATCH_TYPE_RESCUE, rb_iseq_struct::compile_data, 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_LEN, RARRAY_PTR, iseq_catch_table_entry::sp, iseq_catch_table_entry::start, and iseq_catch_table_entry::type.
Referenced by iseq_setup().
Definition at line 1194 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 rb_iseq_compile_node().
| static int iseq_set_optargs_table | ( | rb_iseq_t * | iseq | ) | [static] |
Definition at line 1609 of file compile.c.
References rb_iseq_struct::arg_opt_table, rb_iseq_struct::arg_opts, COMPILE_OK, and label_get_position().
Referenced by iseq_setup().
| static int iseq_set_sequence | ( | rb_iseq_t * | iseq, | |
| LINK_ANCHOR * | anchor | |||
| ) | [static] |
ruby insn object array -> raw instruction sequence
Definition at line 1261 of file compile.c.
References ALLOC_N, calc_sp_depth(), COMPILE_OK, dump_disasm_list(), rb_iseq_struct::filename, FIRST_ELEMENT(), FIX2INT, GetISeqPtr, hide_obj, rb_iseq_struct::ic_entries, rb_iseq_struct::ic_size, insn_data_length(), iseq_insn_data::insn_id, rb_iseq_struct::insn_info_size, rb_iseq_struct::insn_info_table, INT2FIX, rb_iseq_struct::iseq, iseq_add_mark_object(), rb_iseq_struct::iseq_size, iseq_adjust_data::label, len, iseq_insn_info_entry::line_no, iseq_adjust_data::line_no, iseq_insn_data::line_no, MEMZERO, rb_iseq_struct::name, iseq_link_element::next, iseq_insn_data::operand_size, iseq_insn_data::operands, iseq_insn_info_entry::position, iseq_label_data::position, RARRAY_LEN, rb_ary_entry(), rb_bug(), rb_compile_error(), rb_compile_warning(), rb_hash_aset(), rb_hash_new(), rb_hash_tbl(), RHASH_TBL, RSTRING_PTR, iseq_label_data::set, iseq_label_data::sp, iseq_insn_info_entry::sp, st_lookup, rb_iseq_struct::stack_max, SYM2ID, TRUE, type, iseq_link_element::type, UNLIKELY, and xfree.
Referenced by iseq_setup().
| static int iseq_set_sequence_stackcaching | ( | rb_iseq_t * | iseq, | |
| LINK_ANCHOR * | anchor | |||
| ) | [static] |
Definition at line 2059 of file compile.c.
References COMPILE_OK, rb_iseq_struct::filename, FIRST_ELEMENT(), iseq_insn_data::insn_id, iseq_insn_data::line_no, new_insn_body(), iseq_link_element::next, rb_compile_error(), REMOVE_ELEM(), REPLACE_ELEM(), RSTRING_PTR, and iseq_link_element::type.
Referenced by iseq_setup().
| static int iseq_setup | ( | rb_iseq_t * | iseq, | |
| LINK_ANCHOR * | anchor | |||
| ) | [static] |
Definition at line 931 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, and StringValueCStr.
Referenced by iseq_build_body(), and rb_iseq_compile_node().
Definition at line 1804 of file compile.c.
References argc, COMPILE_OK, FIX2INT, idAREF, idDIV, idEq, idGE, idGT, idLE, idLT, idLTLT, idMINUS, idMOD, idMULT, idNeq, idNot, idPLUS, iseq_insn_data::insn_id, insn_set_specialized_instruction(), INT2FIX, OPERAND_AT, and SYM2ID.
Referenced by iseq_optimize().
| static int label_get_position | ( | LABEL * | lobj | ) | [static] |
Definition at line 1540 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 1546 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 698 of file compile.c.
References iseq_link_anchor::anchor, and iseq_link_element::next.
Referenced by iseq_compile_each(), and setup_args().
Definition at line 2773 of file compile.c.
References ISEQ_TYPE_BLOCK, rb_iseq_struct::local_iseq, rb_iseq_struct::name, rb_iseq_struct::parent_iseq, rb_sprintf(), RSTRING_PTR, and rb_iseq_struct::type.
Referenced by iseq_compile_each().
Definition at line 855 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 VALUE new_child_iseq | ( | rb_iseq_t * | iseq, | |
| NODE * | node, | |||
| VALUE | name, | |||
| VALUE | parent, | |||
| VALUE | type, | |||
| int | line_no | |||
| ) | [static] |
Definition at line 917 of file compile.c.
References rb_iseq_struct::compile_data, debugs, INT2FIX, iseq_add_mark_object(), iseq_filename, iseq_filepath, iseq_compile_data::option, rb_iseq_new_with_opt(), and rb_iseq_struct::self.
Definition at line 883 of file compile.c.
References argv, compile_data_alloc(), new_insn_core(), and va_init_list.
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 866 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_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 901 of file compile.c.
References compile_data_alloc(), rb_iseq_struct::ic_size, INT2FIX, and new_insn_core().
Definition at line 841 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.
| NORETURN | ( | PRINTF_ARGS(void rb_compile_bug(const char *, int, const char *,...), 3, 4) | ) |
| static LINK_ELEMENT* POP_ELEMENT | ( | ISEQ_ARG_DECLARE LINK_ANCHOR * | anchor | ) | [static] |
Definition at line 659 of file compile.c.
References iseq_link_element::next, iseq_link_element::prev, and verify_list().
Referenced by compile_massign_lhs(), iseq_compile_each(), and setup_args().
| 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 2796 of file compile.c.
References rb_iseq_struct::compile_data, iseq_compile_data_ensure_node_stack::ensure_node, iseq_compile_data::ensure_node_stack, iseq_compile_data_ensure_node_stack::erange, and iseq_compile_data_ensure_node_stack::prev.
Referenced by iseq_compile_each().
| int rb_dvar_defined | ( | ID | id | ) |
Definition at line 5441 of file compile.c.
References rb_thread_struct::base_block, GET_THREAD, rb_block_struct::iseq, ISEQ_TYPE_BLOCK, ISEQ_TYPE_ENSURE, ISEQ_TYPE_EVAL, ISEQ_TYPE_MAIN, ISEQ_TYPE_RESCUE, 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().
| VALUE rb_insns_name_array | ( | void | ) |
Definition at line 5123 of file compile.c.
References numberof, rb_ary_new(), rb_ary_push(), rb_obj_freeze(), and rb_str_new2.
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 5365 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_body(), iseq_build_exception(), rb_iseq_struct::local_size, rb_iseq_struct::local_table, rb_iseq_struct::local_table_size, NUM2INT, RARRAY_LEN, RARRAY_LENINT, RARRAY_PTR, rb_ary_entry(), register_label(), rb_iseq_struct::self, st_init_numtable, and SYM2ID.
Referenced by iseq_load().
Definition at line 423 of file compile.c.
References ADD_CATCH_ENTRY, ADD_INSN, ADD_INSN1, ADD_INSN2, ADD_LABEL, ADD_TRACE, CATCH_TYPE_NEXT, CATCH_TYPE_REDO, COMPILE, rb_iseq_struct::compile_data, COMPILE_POPED, DECL_ANCHOR, ensure_range::end, iseq_compile_data::end_label, ERROR_ARGS, FIX2INT, GetISeqPtr, INIT_ANCHOR, INT2FIX, iseq_set_arguments(), iseq_set_exception_local_table(), iseq_set_local_table(), iseq_setup(), ISEQ_TYPE_BLOCK, ISEQ_TYPE_CLASS, ISEQ_TYPE_DEFINED_GUARD, ISEQ_TYPE_ENSURE, ISEQ_TYPE_EVAL, ISEQ_TYPE_MAIN, ISEQ_TYPE_METHOD, ISEQ_TYPE_RESCUE, ISEQ_TYPE_TOP, iseq_compile_data::last_line, rb_iseq_struct::line_no, nd_line, nd_type, NEW_LABEL, NODE_SCOPE, rb_bug(), rb_compile_error(), RUBY_EVENT_CALL, RUBY_EVENT_CLASS, RUBY_EVENT_END, RUBY_EVENT_RETURN, iseq_compile_data::start_label, and rb_iseq_struct::type.
Referenced by rb_iseq_new_with_bopt_and_opt().
| int rb_iseq_translate_threaded_code | ( | rb_iseq_t * | iseq | ) |
Definition at line 511 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, and rb_vm_get_insns_address_table().
Referenced by iseq_setup(), and rb_iseq_build_for_ruby2cext().
| int rb_local_defined | ( | ID | id | ) |
Definition at line 5466 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 5485 of file compile.c.
References GET_THREAD.
Referenced by parser_compile_string(), and rb_parser_compile_file().
| int rb_parse_in_main | ( | void | ) |
| static LABEL* register_label | ( | rb_iseq_t * | iseq, | |
| struct st_table * | labels_table, | |||
| VALUE | obj | |||
| ) | [static] |
Definition at line 5134 of file compile.c.
References NEW_LABEL, rb_convert_type(), st_insert, st_lookup, and T_SYMBOL.
Referenced by iseq_build_body(), iseq_build_exception(), and rb_iseq_build_from_ary().
| static void REMOVE_ELEM | ( | LINK_ELEMENT * | elem | ) | [static] |
Definition at line 636 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 623 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, | |||
| unsigned long * | flag | |||
| ) | [static] |
Definition at line 2860 of file compile.c.
References ADD_INSN, ADD_INSN1, ADD_SEQ, COMPILE, compile_array(), 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, POP_ELEMENT(), Qfalse, rb_bug(), ruby_node_name(), VM_CALL_ARGS_BLOCKARG_BIT, and VM_CALL_ARGS_SPLAT_BIT.
Referenced by iseq_compile_each().
| static void verify_list | ( | ISEQ_ARG_DECLARE const char * | info, | |
| LINK_ANCHOR * | anchor | |||
| ) | [static] |
Definition at line 356 of file compile.c.
References iseq_link_anchor::anchor, compile_debug, iseq_link_anchor::last, list, iseq_link_element::next, iseq_link_element::prev, and rb_bug().
Referenced by ADD_ELEM(), APPEND_LIST(), INSERT_LIST(), and POP_ELEMENT().
| static VALUE when_vals | ( | rb_iseq_t * | iseq, | |
| LINK_ANCHOR * | cond_seq, | |||
| NODE * | vals, | |||
| LABEL * | l1, | |||
| VALUE | special_literals | |||
| ) | [static] |
Definition at line 2322 of file compile.c.
References ADD_INSN1, ADD_INSNL, ADD_SEND, case_when_optimizable_literal(), COMPILE, ID2SYM, idEqq, INT2FIX, nd_line, Qfalse, and rb_ary_push().
Referenced by iseq_compile_each().
struct st_hash_type cdhash_type [static] |