@@ -9509,10 +9509,7 @@ parse_target(pm_parser_t *parser, pm_node_t *target) {
9509
9509
splat->expression = parse_target(parser, splat->expression);
9510
9510
}
9511
9511
9512
- pm_multi_target_node_t *multi_target = pm_multi_target_node_create(parser);
9513
- pm_multi_target_node_targets_append(parser, multi_target, (pm_node_t *) splat);
9514
-
9515
- return (pm_node_t *) multi_target;
9512
+ return (pm_node_t *) splat;
9516
9513
}
9517
9514
case PM_CALL_NODE: {
9518
9515
pm_call_node_t *call = (pm_call_node_t *) target;
@@ -9802,7 +9799,7 @@ parse_targets(pm_parser_t *parser, pm_node_t *first_target, pm_binding_power_t b
9802
9799
target = parse_target(parser, target);
9803
9800
9804
9801
pm_multi_target_node_targets_append(parser, result, target);
9805
- } else {
9802
+ } else if (!match1(parser, PM_TOKEN_EOF)) {
9806
9803
// If we get here, then we have a trailing , in a multi target node.
9807
9804
// We need to indicate this somehow in the tree, so we'll add an
9808
9805
// anonymous splat.
@@ -12526,12 +12523,13 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power) {
12526
12523
parser_lex(parser);
12527
12524
pm_accepts_block_stack_pop(parser);
12528
12525
12529
- // If we have a single statement and are ending on a right
12530
- // parenthesis, then we need to check if this is possibly a
12531
- // multiple target node.
12532
- if (PM_NODE_TYPE_P(statement, PM_MULTI_TARGET_NODE)) {
12526
+ if (PM_NODE_TYPE_P(statement, PM_MULTI_TARGET_NODE) || PM_NODE_TYPE_P( statement, PM_SPLAT_NODE)) {
12527
+ // If we have a single statement and are ending on a right
12528
+ // parenthesis, then we need to check if this is possibly a
12529
+ // multiple target node.
12533
12530
pm_multi_target_node_t *multi_target;
12534
- if (((pm_multi_target_node_t *) statement)->lparen_loc.start == NULL) {
12531
+
12532
+ if (PM_NODE_TYPE_P(statement, PM_MULTI_TARGET_NODE) && ((pm_multi_target_node_t *) statement)->lparen_loc.start == NULL) {
12535
12533
multi_target = (pm_multi_target_node_t *) statement;
12536
12534
} else {
12537
12535
multi_target = pm_multi_target_node_create(parser);
@@ -14575,18 +14573,13 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t
14575
14573
return parse_write(parser, node, &token, value);
14576
14574
}
14577
14575
case PM_SPLAT_NODE: {
14578
- pm_splat_node_t *splat_node = (pm_splat_node_t *) node;
14576
+ pm_multi_target_node_t *multi_target = pm_multi_target_node_create(parser);
14577
+ pm_multi_target_node_targets_append(parser, multi_target, node);
14579
14578
14580
- switch (PM_NODE_TYPE(splat_node->expression)) {
14581
- case PM_CASE_WRITABLE:
14582
- parser_lex(parser);
14583
- pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, PM_ERR_EXPECT_EXPRESSION_AFTER_EQUAL);
14584
- return parse_write(parser, (pm_node_t *) splat_node, &token, value);
14585
- default:
14586
- break;
14587
- }
14579
+ parser_lex(parser);
14580
+ pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, PM_ERR_EXPECT_EXPRESSION_AFTER_EQUAL);
14581
+ return parse_write(parser, (pm_node_t *) multi_target, &token, value);
14588
14582
}
14589
- /* fallthrough */
14590
14583
default:
14591
14584
parser_lex(parser);
14592
14585
0 commit comments