Skip to content

Commit

Permalink
- ruby31.y: fix preparing the state for one-line patterns without bra…
Browse files Browse the repository at this point in the history
…ces (#864)
  • Loading branch information
palkan committed Aug 2, 2022
1 parent 4928714 commit 27f83ba
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 0 deletions.
4 changes: 4 additions & 0 deletions lib/parser/ruby31.y
Expand Up @@ -359,13 +359,15 @@ rule
@lexer.state = :expr_beg
@lexer.command_start = false
@pattern_variables.push
@pattern_hash_keys.push

result = @context.in_kwarg
@context.in_kwarg = true
}
p_top_expr_body
{
@pattern_variables.pop
@pattern_hash_keys.pop
@context.in_kwarg = val[2]
result = @builder.match_pattern(val[0], val[1], val[3])
}
Expand All @@ -374,13 +376,15 @@ rule
@lexer.state = :expr_beg
@lexer.command_start = false
@pattern_variables.push
@pattern_hash_keys.push

result = @context.in_kwarg
@context.in_kwarg = true
}
p_top_expr_body
{
@pattern_variables.pop
@pattern_hash_keys.pop
@context.in_kwarg = val[2]
result = @builder.match_pattern_p(val[0], val[1], val[3])
}
Expand Down
4 changes: 4 additions & 0 deletions lib/parser/ruby32.y
Expand Up @@ -359,13 +359,15 @@ rule
@lexer.state = :expr_beg
@lexer.command_start = false
@pattern_variables.push
@pattern_hash_keys.push

result = @context.in_kwarg
@context.in_kwarg = true
}
p_top_expr_body
{
@pattern_variables.pop
@pattern_hash_keys.pop
@context.in_kwarg = val[2]
result = @builder.match_pattern(val[0], val[1], val[3])
}
Expand All @@ -374,13 +376,15 @@ rule
@lexer.state = :expr_beg
@lexer.command_start = false
@pattern_variables.push
@pattern_hash_keys.push

result = @context.in_kwarg
@context.in_kwarg = true
}
p_top_expr_body
{
@pattern_variables.pop
@pattern_hash_keys.pop
@context.in_kwarg = val[2]
result = @builder.match_pattern_p(val[0], val[1], val[3])
}
Expand Down
34 changes: 34 additions & 0 deletions test/test_parser.rb
Expand Up @@ -9621,6 +9621,40 @@ def test_pattern_matching_single_line_allowed_omission_of_parentheses
%q{~~~~~~~~~~~~ expression (match_pattern_p)
| ~~ operator (match_pattern_p)},
SINCE_3_1)

assert_parses(
s(:begin,
s(:match_pattern_p,
s(:hash,
s(:pair,
s(:sym, :key),
s(:sym, :value))),
s(:hash_pattern,
s(:pair,
s(:sym, :key),
s(:match_var, :value)))),
s(:lvar, :value)),
%q{{key: :value} in key: value; value},
%q{~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression (match_pattern_p)
| ~~ operator (match_pattern_p)},
SINCE_3_1)

assert_parses(
s(:begin,
s(:match_pattern,
s(:hash,
s(:pair,
s(:sym, :key),
s(:sym, :value))),
s(:hash_pattern,
s(:pair,
s(:sym, :key),
s(:match_var, :value)))),
s(:lvar, :value)),
%q{{key: :value} => key: value; value},
%q{~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression (match_pattern)
| ~~ operator (match_pattern)},
SINCE_3_1)
end

def test_ruby_bug_pattern_matching_restore_in_kwarg_flag
Expand Down

0 comments on commit 27f83ba

Please sign in to comment.