Skip to content

Commit

Permalink
Fix unexpected "duplicated key name" error in paren-less one line pat…
Browse files Browse the repository at this point in the history
…tern matching

[Bug #18990]
  • Loading branch information
k-tsj committed Sep 9, 2022
1 parent 59eadf3 commit db0e0da
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 4 deletions.
16 changes: 12 additions & 4 deletions parse.y
Expand Up @@ -1774,14 +1774,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
{
Expand All @@ -1792,14 +1796,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
;
Expand Down
12 changes: 12 additions & 0 deletions test/ruby/test_pattern_matching.rb
Expand Up @@ -1570,6 +1570,18 @@ def test_one_line
assert_equal false, (1 in 2)
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
Expand Down

0 comments on commit db0e0da

Please sign in to comment.