diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-03-31 15:57:43 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-03-31 15:57:43 +0900 |
| commit | 9f85c5e4834cae173c08292dfcb99d87d31cb398 (patch) | |
| tree | 30c4b84705d107104521e466c02863545b7f6d73 | |
| parent | a7ca5a9b6e5f56fcf2c48f8a03382b7961f1bac8 (diff) | |
| download | mruby-9f85c5e4834cae173c08292dfcb99d87d31cb398.tar.gz mruby-9f85c5e4834cae173c08292dfcb99d87d31cb398.zip | |
codegen.c: `yield` outside of method is now `SyntaxError`.
| -rw-r--r-- | mrbgems/mruby-compiler/core/codegen.c | 4 | ||||
| -rw-r--r-- | test/t/syntax.rb | 7 |
2 files changed, 6 insertions, 5 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index a17dbf972..4d7c5fa8c 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -2355,7 +2355,7 @@ codegen(codegen_scope *s, node *tree, int val) case NODE_YIELD: { codegen_scope *s2 = s; - int lv = 0, ainfo = 0; + int lv = 0, ainfo = -1; int n = 0, sendv = 0; while (!s2->mscope) { @@ -2365,8 +2365,8 @@ codegen(codegen_scope *s, node *tree, int val) } if (s2) { ainfo = s2->ainfo; - if (ainfo < 0) codegen_error(s, "invalid yield (SyntaxError)"); } + if (ainfo < 0) codegen_error(s, "invalid yield (SyntaxError)"); push(); if (tree) { n = gen_values(s, tree, VAL, 0); diff --git a/test/t/syntax.rb b/test/t/syntax.rb index 3b6de6c18..b3ee2d438 100644 --- a/test/t/syntax.rb +++ b/test/t/syntax.rb @@ -35,9 +35,10 @@ assert('super', '11.3.4') do end assert('yield', '11.3.5') do - assert_raise LocalJumpError do - yield - end +# it's syntax error now +# assert_raise LocalJumpError do +# yield +# end assert_raise LocalJumpError do o = Object.new def o.foo |
