@@ -9835,12 +9835,10 @@ parse_arguments_list(pm_parser_t *parser, pm_arguments_t *arguments, bool accept
9835
9835
}
9836
9836
9837
9837
static inline pm_node_t *
9838
- parse_conditional(pm_parser_t *parser, pm_context_t context) {
9839
- pm_token_t keyword = parser->previous;
9840
-
9838
+ parse_predicate(pm_parser_t *parser, pm_binding_power_t binding_power, pm_context_t context) {
9841
9839
context_push(parser, PM_CONTEXT_PREDICATE);
9842
9840
pm_diagnostic_id_t error_id = context == PM_CONTEXT_IF ? PM_ERR_CONDITIONAL_IF_PREDICATE : PM_ERR_CONDITIONAL_UNLESS_PREDICATE;
9843
- pm_node_t *predicate = parse_expression(parser, PM_BINDING_POWER_MODIFIER , error_id);
9841
+ pm_node_t *predicate = parse_expression(parser, binding_power , error_id);
9844
9842
9845
9843
// Predicates are closed by a term, a "then", or a term and then a "then".
9846
9844
bool predicate_closed = accept2(parser, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON);
@@ -9850,6 +9848,13 @@ parse_conditional(pm_parser_t *parser, pm_context_t context) {
9850
9848
}
9851
9849
9852
9850
context_pop(parser);
9851
+ return predicate;
9852
+ }
9853
+
9854
+ static inline pm_node_t *
9855
+ parse_conditional(pm_parser_t *parser, pm_context_t context) {
9856
+ pm_token_t keyword = parser->previous;
9857
+ pm_node_t *predicate = parse_predicate(parser, PM_BINDING_POWER_MODIFIER, context);
9853
9858
pm_statements_node_t *statements = NULL;
9854
9859
9855
9860
if (!match3(parser, PM_TOKEN_KEYWORD_ELSIF, PM_TOKEN_KEYWORD_ELSE, PM_TOKEN_KEYWORD_END)) {
@@ -9881,12 +9886,7 @@ parse_conditional(pm_parser_t *parser, pm_context_t context) {
9881
9886
if (context == PM_CONTEXT_IF) {
9882
9887
while (accept1(parser, PM_TOKEN_KEYWORD_ELSIF)) {
9883
9888
pm_token_t elsif_keyword = parser->previous;
9884
- pm_node_t *predicate = parse_expression(parser, PM_BINDING_POWER_MODIFIER, PM_ERR_CONDITIONAL_ELSIF_PREDICATE);
9885
-
9886
- // Predicates are closed by a term, a "then", or a term and then a "then".
9887
- accept2(parser, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON);
9888
- accept1(parser, PM_TOKEN_KEYWORD_THEN);
9889
-
9889
+ pm_node_t *predicate = parse_predicate(parser, PM_BINDING_POWER_MODIFIER, PM_CONTEXT_ELSIF);
9890
9890
pm_accepts_block_stack_push(parser, true);
9891
9891
pm_statements_node_t *statements = parse_statements(parser, PM_CONTEXT_ELSIF);
9892
9892
pm_accepts_block_stack_pop(parser);
0 commit comments