summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--parse.y2
-rw-r--r--test/ruby/test_syntax.rb7
3 files changed, 14 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 0ca18f7..71883d5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Mon Feb 15 15:44:09 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * 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 <duerst@it.aoyama.ac.jp>
* enc/unicode/case-folding.rb: Added debugging option
diff --git a/parse.y b/parse.y
index 3cbb282..b8d5e6c 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 97a1e5b..11b3f27 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 }