Merge pull request #898 from masamitsu-murase/modify_return_value

Modify handling of NODE_RETURN and NODE_NEXT.
This commit is contained in:
Yukihiro "Matz" Matsumoto
2013-02-26 18:10:02 -08:00
2 changed files with 16 additions and 8 deletions
+11 -3
View File
@@ -1570,15 +1570,20 @@ codegen(codegen_scope *s, node *tree, int val)
break;
case NODE_RETURN:
codegen(s, tree, VAL);
pop();
if (tree) {
codegen(s, tree, VAL);
pop();
}
else {
genop(s, MKOP_A(OP_LOADNIL, cursp()));
}
if (s->loop) {
genop(s, MKOP_AB(OP_RETURN, cursp(), OP_R_RETURN));
}
else {
genop_peep(s, MKOP_AB(OP_RETURN, cursp(), OP_R_NORMAL), NOVAL);
}
push();
if (val) push();
break;
case NODE_YIELD:
@@ -1630,6 +1635,9 @@ codegen(codegen_scope *s, node *tree, int val)
codegen(s, tree, VAL);
pop();
}
else {
genop(s, MKOP_A(OP_LOADNIL, cursp()));
}
genop_peep(s, MKOP_AB(OP_RETURN, cursp(), OP_R_NORMAL), NOVAL);
}
if (val) push();