From fbb51ff44cef3a28658285783b810acc8cbae048 Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 15 Feb 2016 06:44:36 +0000 Subject: parse.y: kwarg to method with same name variable * parse.y (parse_ident): allow keyword arguments just after a method where the same name local variable is defined. [ruby-core:73816] [Bug#12073] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53835 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ parse.y | 2 +- test/ruby/test_syntax.rb | 7 +++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 0ca18f7ffd..71883d54e6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Mon Feb 15 15:44:09 2016 Nobuyoshi Nakada + + * parse.y (parse_ident): allow keyword arguments just after a + method where the same name local variable is defined. + [ruby-core:73816] [Bug#12073] + Mon Feb 15 14:43:28 2016 Martin Duerst * enc/unicode/case-folding.rb: Added debugging option diff --git a/parse.y b/parse.y index 3cbb282d01..b8d5e6cbf1 100644 --- a/parse.y +++ b/parse.y @@ -8073,7 +8073,7 @@ parse_ident(struct parser_params *parser, int c, int cmd_state) ident = tokenize_ident(parser, last_state); if (!IS_lex_state_for(last_state, EXPR_DOT|EXPR_FNAME) && lvar_defined(ident)) { - SET_LEX_STATE(EXPR_END); + SET_LEX_STATE(EXPR_END|EXPR_LABEL); } return result; } diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb index 97a1e5b63d..11b3f27582 100644 --- a/test/ruby/test_syntax.rb +++ b/test/ruby/test_syntax.rb @@ -360,6 +360,13 @@ WARN assert_valid_syntax("{label: <<~DOC\n""DOC\n""}", bug11849) end + def test_cmdarg_kwarg_lvar_clashing_method + bug12073 = '[ruby-core:73816] [Bug#12073]' + a = 1 + assert_valid_syntax("a b: 1") + assert_valid_syntax("a = 1; a b: 1", bug12073) + end + def test_duplicated_arg assert_syntax_error("def foo(a, a) end", /duplicated argument name/) assert_nothing_raised { def foo(_, _) end } -- cgit v1.2.3