aboutsummaryrefslogtreecommitdiffstats
path: root/prism/prism.c
diff options
context:
space:
mode:
authorHaldun Bayhantopcu <haldun@github.com>2024-02-15 16:30:58 +0100
committergit <svn-admin@ruby-lang.org>2024-02-15 16:40:36 +0000
commita0217025969097709928657acab58321bf0adedf (patch)
tree3486bb38e798dfb53a0361ad528f5dac247bc543 /prism/prism.c
parenta7718c914a216457ca9d3806085e673eabda8b31 (diff)
downloadruby-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.c13
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);
}