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;
|
||
}
|
||
}
|