diff options
author | Haldun Bayhantopcu <haldun@github.com> | 2024-02-15 16:30:58 +0100 |
---|---|---|
committer | git <svn-admin@ruby-lang.org> | 2024-02-15 16:40:36 +0000 |
commit | a0217025969097709928657acab58321bf0adedf (patch) | |
tree | 3486bb38e798dfb53a0361ad528f5dac247bc543 /prism/prism.c | |
parent | a7718c914a216457ca9d3806085e673eabda8b31 (diff) | |
download | ruby-a0217025969097709928657acab58321bf0adedf.tar.gz |
[ruby/prism] Fix parsing rescue modifier
https://github.com/ruby/prism/commit/b7407ae3c0
Diffstat (limited to 'prism/prism.c')
-rw-r--r-- | prism/prism.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/prism/prism.c b/prism/prism.c index e517a0cc21..d87391d637 100644 --- a/prism/prism.c +++ b/prism/prism.c @@ -16769,7 +16769,18 @@ parse_assignment_values(pm_parser_t *parser, pm_binding_power_t previous_binding if (is_single_value && match1(parser, PM_TOKEN_KEYWORD_RESCUE_MODIFIER)) { pm_token_t rescue = parser->current; parser_lex(parser); - pm_node_t *right = parse_expression(parser, binding_power, false, PM_ERR_RESCUE_MODIFIER_VALUE); + + bool accepts_command_call_inner = false; + + // RHS can accept command call iff the value is a call with arguments but without paranthesis. + if (PM_NODE_TYPE_P(value, PM_CALL_NODE)) { + pm_call_node_t *call_node = (pm_call_node_t *)value; + if ((call_node->arguments != NULL) && (call_node->opening_loc.start == NULL)) { + accepts_command_call_inner = true; + } + } + + pm_node_t *right = parse_expression(parser, binding_power, accepts_command_call_inner, PM_ERR_RESCUE_MODIFIER_VALUE); return (pm_node_t *) pm_rescue_modifier_node_create(parser, value, &rescue, right); } |