1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

compile.c: peephole

* compile.c (iseq_peephole_optimize): remove putting object to be
  popped just soon.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52517 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2015-11-10 03:45:10 +00:00
parent f12746d165
commit f11a85c726

View file

@ -2000,6 +2000,18 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal
}
}
if (iobj->insn_id == BIN(pop)) {
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)) {
REMOVE_ELEM(prev);
REMOVE_ELEM(&iobj->link);
}
}
}
if (do_tailcallopt && iobj->insn_id == BIN(leave)) {
/*
* send ...