ruby-changes:50732
From: nobu <ko1@a...>
Date: Sat, 24 Mar 2018 20:15:16 +0900 (JST)
Subject: [ruby-changes:50732] nobu:r62908 (trunk): compile.c: split add_insn_info
nobu 2018-03-24 20:15:10 +0900 (Sat, 24 Mar 2018) New Revision: 62908 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=62908 Log: compile.c: split add_insn_info * compile.c (add_insn_info, add_adjust_info): split for each list->type, to remove unnecessary repeated conditions and casts. Modified files: trunk/compile.c Index: compile.c =================================================================== --- compile.c (revision 62907) +++ compile.c (revision 62908) @@ -1933,31 +1933,30 @@ fix_sp_depth(rb_iseq_t *iseq, LINK_ANCHO https://github.com/ruby/ruby/blob/trunk/compile.c#L1933 } static int -add_insn_info(struct iseq_insn_info_entry *insns_info, unsigned int *positions, int insns_info_index, int code_index, LINK_ELEMENT *list) +add_insn_info(struct iseq_insn_info_entry *insns_info, unsigned int *positions, + int insns_info_index, int code_index, const INSN *iobj) { - if (list->type == ISEQ_ELEMENT_INSN) { - INSN *iobj = (INSN *)list; - if (insns_info_index == 0 || - insns_info[insns_info_index-1].line_no != iobj->insn_info.line_no || - insns_info[insns_info_index-1].events != iobj->insn_info.events) { - insns_info[insns_info_index].line_no = iobj->insn_info.line_no; - insns_info[insns_info_index].events = iobj->insn_info.events; - positions[insns_info_index] = code_index; - return TRUE; - } - } - else if (list->type == ISEQ_ELEMENT_ADJUST) { - ADJUST *adjust = (ADJUST *)list; - if (insns_info_index > 0 || - insns_info[insns_info_index-1].line_no != adjust->line_no) { - insns_info[insns_info_index].line_no = adjust->line_no; - insns_info[insns_info_index].events = 0; - positions[insns_info_index] = code_index; - return TRUE; - } + if (insns_info_index == 0 || + insns_info[insns_info_index-1].line_no != iobj->insn_info.line_no || + insns_info[insns_info_index-1].events != iobj->insn_info.events) { + insns_info[insns_info_index].line_no = iobj->insn_info.line_no; + insns_info[insns_info_index].events = iobj->insn_info.events; + positions[insns_info_index] = code_index; + return TRUE; } - else { - VM_UNREACHABLE(add_insn_info); + return FALSE; +} + +static int +add_adjust_info(struct iseq_insn_info_entry *insns_info, unsigned int *positions, + int insns_info_index, int code_index, const ADJUST *adjust) +{ + if (insns_info_index > 0 || + insns_info[insns_info_index-1].line_no != adjust->line_no) { + insns_info[insns_info_index].line_no = adjust->line_no; + insns_info[insns_info_index].events = 0; + positions[insns_info_index] = code_index; + return TRUE; } return FALSE; } @@ -2176,7 +2175,7 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ https://github.com/ruby/ruby/blob/trunk/compile.c#L2175 return COMPILE_NG; } } - if (add_insn_info(insns_info, positions, insns_info_index, code_index, (LINK_ELEMENT *)iobj)) insns_info_index++; + if (add_insn_info(insns_info, positions, insns_info_index, code_index, iobj)) insns_info_index++; code_index += len; break; } @@ -2201,7 +2200,7 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ https://github.com/ruby/ruby/blob/trunk/compile.c#L2200 if (adjust->line_no != -1) { const int diff = orig_sp - sp; if (diff > 0) { - if (add_insn_info(insns_info, positions, insns_info_index, code_index, (LINK_ELEMENT *)adjust)) insns_info_index++; + if (add_adjust_info(insns_info, positions, insns_info_index, code_index, adjust)) insns_info_index++; } if (diff > 1) { generated_iseq[code_index++] = BIN(adjuststack); -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/