diff options
-rw-r--r-- | parse.y | 1 | ||||
-rw-r--r-- | test/ruby/test_parse.rb | 7 |
2 files changed, 8 insertions, 0 deletions
@@ -9965,6 +9965,7 @@ new_args_tail_gen(struct parser_params *parser, NODE *k, ID kr, ID b) args = ZALLOC(struct rb_args_info); node = NEW_NODE(NODE_ARGS, 0, 0, args); + if (parser->error_p) return node; args->block_arg = b; args->kw_args = k; diff --git a/test/ruby/test_parse.rb b/test/ruby/test_parse.rb index b4a63e369d..c2ee56ae52 100644 --- a/test/ruby/test_parse.rb +++ b/test/ruby/test_parse.rb @@ -958,6 +958,13 @@ x = __ENCODING__ assert_syntax_error(" 0b\n", /\^/) end + def test_error_def_in_argument + assert_separately([], "#{<<-"begin;"}\n#{<<~"end;"}") + begin; + assert_syntax_error("def f r:def d; def f 0end", /unexpected/) + end; + end + =begin def test_past_scope_variable assert_warning(/past scope/) {catch {|tag| eval("BEGIN{throw tag}; tap {a = 1}; a")}} |