Skip to content

Commit 6b47e3f

Browse files
committed
[ruby/prism] Fix not binding power in endless methods [Backport #21097]
Change rescue modifier binding power from PM_BINDING_POWER_COMPOSITION to PM_BINDING_POWER_MATCH + 1, so that `x = a rescue b in c` is parsed as `(x = (a rescue b)) in c` and `def f = a rescue b in c` is parsed as `(def f = (a rescue b)) in c`. ruby/prism@7e797f59ae
1 parent 901966d commit 6b47e3f

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

prism/prism.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18956,7 +18956,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
1895618956
context_push(parser, PM_CONTEXT_RESCUE_MODIFIER);
1895718957

1895818958
pm_token_t rescue_keyword = parser->previous;
18959-
pm_node_t *value = parse_expression(parser, pm_binding_powers[PM_TOKEN_KEYWORD_RESCUE_MODIFIER].right, false, false, PM_ERR_RESCUE_MODIFIER_VALUE, (uint16_t) (depth + 1));
18959+
pm_node_t *value = parse_expression(parser, PM_BINDING_POWER_MATCH + 1, false, false, PM_ERR_RESCUE_MODIFIER_VALUE, (uint16_t) (depth + 1));
1896018960
context_pop(parser);
1896118961

1896218962
statement = UP(pm_rescue_modifier_node_create(parser, statement, &rescue_keyword, value));
@@ -20253,7 +20253,7 @@ parse_assignment_value(pm_parser_t *parser, pm_binding_power_t previous_binding_
2025320253
pm_token_t rescue = parser->current;
2025420254
parser_lex(parser);
2025520255

20256-
pm_node_t *right = parse_expression(parser, pm_binding_powers[PM_TOKEN_KEYWORD_RESCUE_MODIFIER].right, false, false, PM_ERR_RESCUE_MODIFIER_VALUE, (uint16_t) (depth + 1));
20256+
pm_node_t *right = parse_expression(parser, PM_BINDING_POWER_MATCH + 1, false, false, PM_ERR_RESCUE_MODIFIER_VALUE, (uint16_t) (depth + 1));
2025720257
context_pop(parser);
2025820258

2025920259
return UP(pm_rescue_modifier_node_create(parser, value, &rescue, right));
@@ -20359,7 +20359,7 @@ parse_assignment_values(pm_parser_t *parser, pm_binding_power_t previous_binding
2035920359
}
2036020360
}
2036120361

20362-
pm_node_t *right = parse_expression(parser, pm_binding_powers[PM_TOKEN_KEYWORD_RESCUE_MODIFIER].right, accepts_command_call_inner, false, PM_ERR_RESCUE_MODIFIER_VALUE, (uint16_t) (depth + 1));
20362+
pm_node_t *right = parse_expression(parser, PM_BINDING_POWER_MATCH + 1, accepts_command_call_inner, false, PM_ERR_RESCUE_MODIFIER_VALUE, (uint16_t) (depth + 1));
2036320363
context_pop(parser);
2036420364

2036520365
return UP(pm_rescue_modifier_node_create(parser, value, &rescue, right));

0 commit comments

Comments
 (0)