From 584d6de3c29cb2cfef79ff17ac12f17ace000391 Mon Sep 17 00:00:00 2001 From: Kouhei Sutou Date: Tue, 24 Feb 2015 00:16:41 +0900 Subject: Fix a bug that if and no return value case can't return true clause value Here is a script that reproduce this problem: x = if true 1 else case 2 when 3 end 4 end p x # => nil # 1 is expected --- src/codegen.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/codegen.c') diff --git a/src/codegen.c b/src/codegen.c index 46d457885..1fe26355f 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -1462,8 +1462,13 @@ codegen(codegen_scope *s, node *tree, int val) genop(s, MKOP_AB(OP_MOVE, cursp(), pos)); push(); } - else if (pos3) { - dispatch_linked(s, pos3); + else { + if (pos3) { + dispatch_linked(s, pos3); + } + if (head) { + pop(); + } } } break; -- cgit v1.2.3