summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/codegen.c9
-rw-r--r--test/t/syntax.rb14
2 files changed, 21 insertions, 2 deletions
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;
diff --git a/test/t/syntax.rb b/test/t/syntax.rb
index 7ec6272fe..2621e1b19 100644
--- a/test/t/syntax.rb
+++ b/test/t/syntax.rb
@@ -241,6 +241,20 @@ assert('Return values of case statements') do
assert_equal 1, fb.call
end
+assert('Return values of if and case statements') do
+ true_clause_value =
+ if true
+ 1
+ else
+ case 2
+ when 3
+ end
+ 4
+ end
+
+ assert_equal 1, true_clause_value
+end
+
assert('splat in case statement') do
values = [3,5,1,7,8]
testa = [1,2,7]