From: Eric Wong Date: 2017-04-01T21:32:49+00:00 Subject: [ruby-core:80530] Re: [Ruby trunk Feature#13355] [PATCH] compile.c: optimize literal String range in case/when dispatch Eric Wong wrote: > normalperson@yhbt.net wrote: > > https://bugs.ruby-lang.org/issues/13355 > > I will commit this in a few days if no response. Caught during self review: * Use more descriptive variable names (avoid potential "send" conflict) * s/iseq_add_mark_object_compile_time/iseq_add_mark_object/ since the range lifetime is tied to the overall iseq lifetime. Will commit with following changes (after tests run...) --- a/compile.c +++ b/compile.c @@ -2162,12 +2162,12 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal IS_INSN_ID(end, putstring) && (beg = (INSN *)get_prev_insn(end)) != 0 && IS_INSN_ID(beg, putstring)) { - VALUE sbeg = OPERAND_AT(beg, 0); - VALUE send = OPERAND_AT(end, 0); + VALUE str_beg = OPERAND_AT(beg, 0); + VALUE str_end = OPERAND_AT(end, 0); int excl = FIX2INT(OPERAND_AT(range, 0)); - VALUE lit_range = rb_range_new(sbeg, send, excl); + VALUE lit_range = rb_range_new(str_beg, str_end, excl); - iseq_add_mark_object_compile_time(iseq, lit_range); + iseq_add_mark_object(iseq, lit_range); REMOVE_ELEM(&beg->link); REMOVE_ELEM(&end->link); range->insn_id = BIN(putobject); Unsubscribe: