summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornagachika <nagachika@ruby-lang.org>2022-09-10 16:00:29 +0900
committernagachika <nagachika@ruby-lang.org>2022-09-10 16:00:29 +0900
commit163947f4dc031bb5e619ae64ad4a6a02f8885717 (patch)
tree688d742ba7e8c5d36c761c4ccf3c84741c9808b5
parentc498b16aaa485312e26b0b2109a5950da4cbb7c5 (diff)
merge revision(s) db0e0dad1171456253ebd899e7e878823923d3d8: [Backport #18990]
Fix unexpected "duplicated key name" error in paren-less one line pattern matching [Bug #18990] --- parse.y | 16 ++++++++++++---- test/ruby/test_pattern_matching.rb | 12 ++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-)
-rw-r--r--parse.y16
-rw-r--r--test/ruby/test_pattern_matching.rb12
-rw-r--r--version.h4
3 files changed, 26 insertions, 6 deletions
diff --git a/parse.y b/parse.y
index 4e05bfd672..e3e680414a 100644
--- a/parse.y
+++ b/parse.y
@@ -1762,14 +1762,18 @@ expr : command_call
p->ctxt.in_kwarg = 1;
$<tbl>$ = push_pvtbl(p);
}
+ {
+ $<tbl>$ = push_pktbl(p);
+ }
p_top_expr_body
{
+ pop_pktbl(p, $<tbl>4);
pop_pvtbl(p, $<tbl>3);
p->ctxt.in_kwarg = $<ctxt>2.in_kwarg;
/*%%%*/
- $$ = NEW_CASE3($1, NEW_IN($4, 0, 0, &@4), &@$);
+ $$ = NEW_CASE3($1, NEW_IN($5, 0, 0, &@5), &@$);
/*% %*/
- /*% ripper: case!($1, in!($4, Qnil, Qnil)) %*/
+ /*% ripper: case!($1, in!($5, Qnil, Qnil)) %*/
}
| arg keyword_in
{
@@ -1780,14 +1784,18 @@ expr : command_call
p->ctxt.in_kwarg = 1;
$<tbl>$ = push_pvtbl(p);
}
+ {
+ $<tbl>$ = push_pktbl(p);
+ }
p_top_expr_body
{
+ pop_pktbl(p, $<tbl>4);
pop_pvtbl(p, $<tbl>3);
p->ctxt.in_kwarg = $<ctxt>2.in_kwarg;
/*%%%*/
- $$ = NEW_CASE3($1, NEW_IN($4, NEW_TRUE(&@4), NEW_FALSE(&@4), &@4), &@$);
+ $$ = NEW_CASE3($1, NEW_IN($5, NEW_TRUE(&@5), NEW_FALSE(&@5), &@5), &@$);
/*% %*/
- /*% ripper: case!($1, in!($4, Qnil, Qnil)) %*/
+ /*% ripper: case!($1, in!($5, Qnil, Qnil)) %*/
}
| arg %prec tLBRACE_ARG
;
diff --git a/test/ruby/test_pattern_matching.rb b/test/ruby/test_pattern_matching.rb
index 35c41eb8b6..4c203fb4f9 100644
--- a/test/ruby/test_pattern_matching.rb
+++ b/test/ruby/test_pattern_matching.rb
@@ -1566,6 +1566,18 @@ END
assert_experimental_warning("case [0]; in [*, 0, *]; end")
end
+ def test_bug18990
+ {a: 0} => a:
+ assert_equal 0, a
+ {a: 0} => a:
+ assert_equal 0, a
+
+ {a: 0} in a:
+ assert_equal 0, a
+ {a: 0} in a:
+ assert_equal 0, a
+ end
+
################################################################
def test_single_pattern_error_value_pattern
diff --git a/version.h b/version.h
index 2b3f1d3ce5..83a5306811 100644
--- a/version.h
+++ b/version.h
@@ -11,11 +11,11 @@
# define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR
#define RUBY_VERSION_TEENY 3
#define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR
-#define RUBY_PATCHLEVEL 48
+#define RUBY_PATCHLEVEL 49
#define RUBY_RELEASE_YEAR 2022
#define RUBY_RELEASE_MONTH 9
-#define RUBY_RELEASE_DAY 4
+#define RUBY_RELEASE_DAY 10
#include "ruby/version.h"