aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-08-18 08:19:24 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-08-18 08:19:24 +0000
commit6c0deb7b87ec4b1e586de59e320e27d648b0e2bb (patch)
tree3cede9a43a8acf72c5ce93865d993de6a91d9bcd
parent078f8c1af37ae2623a80ca769887664fed5afd95 (diff)
downloadruby-6c0deb7b87ec4b1e586de59e320e27d648b0e2bb.tar.gz
parse.y: fix labelarg
* parse.y (IS_BEG): include labeled argument state, which was EXPR_LABELARG. [ruby-dev:49221] [Bug #11456] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51624 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--parse.y4
-rw-r--r--test/ruby/test_syntax.rb6
3 files changed, 13 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 6108dd1aa1..1c817273fa 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Tue Aug 18 17:19:21 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (IS_BEG): include labeled argument state, which was
+ EXPR_LABELARG. [ruby-dev:49221] [Bug #11456]
+
Tue Aug 18 16:16:21 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
* include/ruby/ruby.h (RClass): define only in C, `__attribute__`
diff --git a/parse.y b/parse.y
index cc6d3621b5..b4c8c9ad05 100644
--- a/parse.y
+++ b/parse.y
@@ -7108,7 +7108,7 @@ parser_prepare(struct parser_params *parser)
#define IS_ARG() IS_lex_state(EXPR_ARG_ANY)
#define IS_END() IS_lex_state(EXPR_END_ANY)
-#define IS_BEG() IS_lex_state(EXPR_BEG_ANY)
+#define IS_BEG() (IS_lex_state(EXPR_BEG_ANY) || IS_lex_state_all(EXPR_ARG|EXPR_LABELED))
#define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
#define IS_LABEL_POSSIBLE() (\
(IS_lex_state(EXPR_LABEL|EXPR_ENDFN) && !cmd_state) || \
@@ -8361,7 +8361,7 @@ parser_yylex(struct parser_params *parser)
return tSYMBEG;
case '/':
- if (IS_lex_state(EXPR_BEG_ANY)) {
+ if (IS_BEG()) {
lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
return tREGEXP_BEG;
}
diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb
index c457e2d3a4..e4a623208a 100644
--- a/test/ruby/test_syntax.rb
+++ b/test/ruby/test_syntax.rb
@@ -310,6 +310,12 @@ WARN
assert_valid_syntax("false ? raise do end : tap do end", bug10653)
end
+ def test_paren_after_label
+ bug11456 = '[ruby-dev:49221] [Bug #11456]'
+ assert_valid_syntax("{foo: (1 rescue 0)}", bug11456)
+ assert_valid_syntax("{foo: /=/}", bug11456)
+ end
+
def test_duplicated_arg
assert_syntax_error("def foo(a, a) end", /duplicated argument name/)
assert_nothing_raised { def foo(_, _) end }