Bug #12018 ยป 0001-compile.c-fix-tailcall-optimization.patch
| compile.c | ||
|---|---|---|
|
if (piobj) {
|
||
|
struct rb_call_info *ci = (struct rb_call_info *)piobj->operands[0];
|
||
|
rb_iseq_t *blockiseq = (rb_iseq_t *)piobj->operands[1];
|
||
|
if (blockiseq == 0) {
|
||
|
if (piobj->insn_id == BIN(send) || piobj->insn_id == BIN(invokesuper)) {
|
||
|
if (piobj->operands[2] == 0) { /* no blockiseq */
|
||
|
ci->flag |= VM_CALL_TAILCALL;
|
||
|
}
|
||
|
} else {
|
||
|
ci->flag |= VM_CALL_TAILCALL;
|
||
|
}
|
||
|
}
|
||