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