summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/vm.c4
-rw-r--r--test/t/syntax.rb7
2 files changed, 11 insertions, 0 deletions
diff --git a/src/vm.c b/src/vm.c
index 6f8c5109f..db4ca5cba 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -1732,6 +1732,10 @@ RETRY_TRY_BLOCK:
}
stack = e->stack + 1;
}
+ if (mrb_nil_p(stack[m1+r+m2])) {
+ localjump_error(mrb, LOCALJUMP_ERROR_YIELD);
+ goto L_RAISE;
+ }
regs[a] = stack[m1+r+m2];
NEXT;
}
diff --git a/test/t/syntax.rb b/test/t/syntax.rb
index 4ba171f9a..25ae09828 100644
--- a/test/t/syntax.rb
+++ b/test/t/syntax.rb
@@ -38,6 +38,13 @@ assert('yield', '11.3.5') do
assert_raise LocalJumpError do
yield
end
+ assert_raise LocalJumpError do
+ o = Object.new
+ def o.foo
+ yield
+ end
+ o.foo
+ end
end
assert('Abbreviated variable assignment', '11.4.2.3.2') do