diff options
-rw-r--r-- | compile.c | 8 |
1 files changed, 8 insertions, 0 deletions
@@ -2001,11 +2001,19 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal } if (iobj->insn_id == BIN(pop)) { + /* + * putself / putnil / putobject obj / putstring "..." + * pop + * => + * # do nothing + */ LINK_ELEMENT *prev = iobj->link.prev; if (prev->type == ISEQ_ELEMENT_INSN) { enum ruby_vminsn_type previ = ((INSN *)prev)->insn_id; if (previ == BIN(putobject) || previ == BIN(putnil) || previ == BIN(putself) || previ == BIN(putstring)) { + /* just push operand or static value and pop soon, no + * side effects */ REMOVE_ELEM(prev); REMOVE_ELEM(&iobj->link); } |