iseq.c (iseq_data_to_ary): Avoid direct use of insns_info.positions

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61738 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
mame 2018-01-09 14:05:21 +00:00
parent 0cff2f4cfc
commit 6d2de83bf0

14
iseq.c
View File

@ -2123,7 +2123,7 @@ iseq_data_to_ary(const rb_iseq_t *iseq)
{ {
unsigned int i; unsigned int i;
long l; long l;
size_t ti; const struct iseq_insn_info_entry *prev_insn_info;
unsigned int pos; unsigned int pos;
int last_line = 0; int last_line = 0;
VALUE *seq, *iseq_original; VALUE *seq, *iseq_original;
@ -2376,9 +2376,10 @@ iseq_data_to_ary(const rb_iseq_t *iseq)
/* make body with labels and insert line number */ /* make body with labels and insert line number */
body = rb_ary_new(); body = rb_ary_new();
ti = 0; prev_insn_info = NULL;
for (l=0, pos=0; l<RARRAY_LEN(nbody); l++) { for (l=0, pos=0; l<RARRAY_LEN(nbody); l++) {
const struct iseq_insn_info_entry *info;
VALUE ary = RARRAY_AREF(nbody, l); VALUE ary = RARRAY_AREF(nbody, l);
st_data_t label; st_data_t label;
@ -2386,9 +2387,9 @@ iseq_data_to_ary(const rb_iseq_t *iseq)
rb_ary_push(body, (VALUE)label); rb_ary_push(body, (VALUE)label);
} }
if (ti < iseq->body->insns_info.size) { info = get_insn_info(iseq, pos);
const struct iseq_insn_info_entry *info = &iseq->body->insns_info.body[ti];
if (iseq->body->insns_info.positions[ti] == pos) { if (prev_insn_info != info) {
int line = info->line_no; int line = info->line_no;
rb_event_flag_t events = info->events; rb_event_flag_t events = info->events;
@ -2405,8 +2406,7 @@ iseq_data_to_ary(const rb_iseq_t *iseq)
CHECK_EVENT(RUBY_EVENT_B_CALL); CHECK_EVENT(RUBY_EVENT_B_CALL);
CHECK_EVENT(RUBY_EVENT_B_RETURN); CHECK_EVENT(RUBY_EVENT_B_RETURN);
#undef CHECK_EVENT #undef CHECK_EVENT
ti++; prev_insn_info = info;
}
} }
rb_ary_push(body, ary); rb_ary_push(body, ary);