From 9dc820590f226e5d30c04af7eedb3dff9f5c16e7 Mon Sep 17 00:00:00 2001 From: ksss Date: Thu, 14 Jul 2016 10:28:11 +0900 Subject: Should raise LocalJumpError when no block given --- src/vm.c | 4 ++++ test/t/syntax.rb | 7 +++++++ 2 files changed, 11 insertions(+) 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 -- cgit v1.2.3