summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--parse.y12
-rw-r--r--test/ruby/test_syntax.rb5
-rw-r--r--version.h2
4 files changed, 21 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 2ac2de1259..b7ffbcadef 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Mon Jun 23 16:55:13 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (primary): flush cmdarg flags inside left-paren in a
+ command argument, to allow parenthesed do-block as an argument
+ without arguments parentheses. [ruby-core:61950] [Bug #9726]
+
Mon Jun 23 16:45:48 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
* ext/dl/cptr.c (dlptr_free), ext/dl/handle.c (dlhandle_free),
diff --git a/parse.y b/parse.y
index c7ac527210..3cbf8feb24 100644
--- a/parse.y
+++ b/parse.y
@@ -2621,12 +2621,18 @@ primary : literal
$$ = dispatch1(paren, 0);
%*/
}
- | tLPAREN_ARG expr {lex_state = EXPR_ENDARG;} rparen
+ | tLPAREN_ARG
{
+ $<val>1 = cmdarg_stack;
+ cmdarg_stack = 0;
+ }
+ expr {lex_state = EXPR_ENDARG;} rparen
+ {
+ cmdarg_stack = $<val>1;
/*%%%*/
- $$ = $2;
+ $$ = $3;
/*%
- $$ = dispatch1(paren, $2);
+ $$ = dispatch1(paren, $3);
%*/
}
| tLPAREN compstmt ')'
diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb
index 06188cf073..3ccb18d446 100644
--- a/test/ruby/test_syntax.rb
+++ b/test/ruby/test_syntax.rb
@@ -78,6 +78,11 @@ class TestSyntax < Test::Unit::TestCase
end
end
+ def test_do_block_in_cmdarg
+ bug9726 = '[ruby-core:61950] [Bug #9726]'
+ assert_valid_syntax("tap (proc do end)", __FILE__, bug9726)
+ end
+
def test_keyword_rest
bug5989 = '[ruby-core:42455]'
assert_valid_syntax("def kwrest_test(**a) a; end", __FILE__, bug5989)
diff --git a/version.h b/version.h
index 36174171c0..10f3efff94 100644
--- a/version.h
+++ b/version.h
@@ -1,6 +1,6 @@
#define RUBY_VERSION "2.0.0"
#define RUBY_RELEASE_DATE "2014-06-23"
-#define RUBY_PATCHLEVEL 491
+#define RUBY_PATCHLEVEL 492
#define RUBY_RELEASE_YEAR 2014
#define RUBY_RELEASE_MONTH 6