From 49c929a237fe482b2286aab47a263f8b51225cad Mon Sep 17 00:00:00 2001 From: Masamitsu MURASE Date: Wed, 27 Feb 2013 02:37:26 +0900 Subject: Return nil if argument of NODE_RETURN and NODE_NEXT is not specified. --- src/codegen.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/codegen.c b/src/codegen.c index 53324f321..a595a27c8 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -1571,15 +1571,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: @@ -1631,6 +1636,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(); -- cgit v1.2.3