@@ -13125,7 +13125,13 @@ parse_targets(pm_parser_t *parser, pm_node_t *first_target, pm_binding_power_t b
1312513125 bool has_rest = PM_NODE_TYPE_P(first_target, PM_SPLAT_NODE);
1312613126
1312713127 pm_multi_target_node_t *result = pm_multi_target_node_create(parser);
13128- pm_multi_target_node_targets_append(parser, result, parse_target(parser, first_target, true, false));
13128+
13129+ pm_node_t *first = parse_target(parser, first_target, true, false);
13130+ PM_VALIDATE_NODE_TYPE(parser, first,
13131+ PM_SPLAT_NODE, PM_IMPLICIT_REST_NODE, PM_LOCAL_VARIABLE_TARGET_NODE, PM_INSTANCE_VARIABLE_TARGET_NODE,
13132+ PM_CLASS_VARIABLE_TARGET_NODE, PM_GLOBAL_VARIABLE_TARGET_NODE, PM_CONSTANT_TARGET_NODE,
13133+ PM_CONSTANT_PATH_TARGET_NODE, PM_CALL_TARGET_NODE, PM_INDEX_TARGET_NODE, PM_MULTI_TARGET_NODE, PM_REQUIRED_PARAMETER_NODE);
13134+ pm_multi_target_node_targets_append(parser, result, first);
1312913135
1313013136 while (accept1(parser, PM_TOKEN_COMMA)) {
1313113137 if (accept1(parser, PM_TOKEN_USTAR)) {
@@ -13152,12 +13158,20 @@ parse_targets(pm_parser_t *parser, pm_node_t *first_target, pm_binding_power_t b
1315213158 pm_node_t *target = parse_expression(parser, binding_power, false, false, PM_ERR_EXPECT_EXPRESSION_AFTER_COMMA, (uint16_t) (depth + 1));
1315313159 target = parse_target(parser, target, true, false);
1315413160
13161+ PM_VALIDATE_NODE_TYPE(parser, target,
13162+ PM_SPLAT_NODE, PM_IMPLICIT_REST_NODE, PM_LOCAL_VARIABLE_TARGET_NODE, PM_INSTANCE_VARIABLE_TARGET_NODE,
13163+ PM_CLASS_VARIABLE_TARGET_NODE, PM_GLOBAL_VARIABLE_TARGET_NODE, PM_CONSTANT_TARGET_NODE,
13164+ PM_CONSTANT_PATH_TARGET_NODE, PM_CALL_TARGET_NODE, PM_INDEX_TARGET_NODE, PM_MULTI_TARGET_NODE, PM_REQUIRED_PARAMETER_NODE);
1315513165 pm_multi_target_node_targets_append(parser, result, target);
1315613166 context_pop(parser);
1315713167 } else if (token_begins_expression_p(parser->current.type)) {
1315813168 pm_node_t *target = parse_expression(parser, binding_power, false, false, PM_ERR_EXPECT_EXPRESSION_AFTER_COMMA, (uint16_t) (depth + 1));
1315913169 target = parse_target(parser, target, true, false);
1316013170
13171+ PM_VALIDATE_NODE_TYPE(parser, target,
13172+ PM_SPLAT_NODE, PM_IMPLICIT_REST_NODE, PM_LOCAL_VARIABLE_TARGET_NODE, PM_INSTANCE_VARIABLE_TARGET_NODE,
13173+ PM_CLASS_VARIABLE_TARGET_NODE, PM_GLOBAL_VARIABLE_TARGET_NODE, PM_CONSTANT_TARGET_NODE,
13174+ PM_CONSTANT_PATH_TARGET_NODE, PM_CALL_TARGET_NODE, PM_INDEX_TARGET_NODE, PM_MULTI_TARGET_NODE, PM_REQUIRED_PARAMETER_NODE);
1316113175 pm_multi_target_node_targets_append(parser, result, target);
1316213176 } else if (!match1(parser, PM_TOKEN_EOF)) {
1316313177 // If we get here, then we have a trailing , in a multi target node.
@@ -17647,6 +17661,10 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
1764717661 multi_target = (pm_multi_target_node_t *) statement;
1764817662 } else {
1764917663 multi_target = pm_multi_target_node_create(parser);
17664+ PM_VALIDATE_NODE_TYPE(parser, statement,
17665+ PM_SPLAT_NODE, PM_IMPLICIT_REST_NODE, PM_LOCAL_VARIABLE_TARGET_NODE, PM_INSTANCE_VARIABLE_TARGET_NODE,
17666+ PM_CLASS_VARIABLE_TARGET_NODE, PM_GLOBAL_VARIABLE_TARGET_NODE, PM_CONSTANT_TARGET_NODE,
17667+ PM_CONSTANT_PATH_TARGET_NODE, PM_CALL_TARGET_NODE, PM_INDEX_TARGET_NODE, PM_MULTI_TARGET_NODE, PM_REQUIRED_PARAMETER_NODE);
1765017668 pm_multi_target_node_targets_append(parser, multi_target, statement);
1765117669 }
1765217670
@@ -17755,6 +17773,10 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
1775517773
1775617774 if (PM_NODE_TYPE_P(statement, PM_SPLAT_NODE)) {
1775717775 pm_multi_target_node_t *multi_target = pm_multi_target_node_create(parser);
17776+ PM_VALIDATE_NODE_TYPE(parser, statement,
17777+ PM_SPLAT_NODE, PM_IMPLICIT_REST_NODE, PM_LOCAL_VARIABLE_TARGET_NODE, PM_INSTANCE_VARIABLE_TARGET_NODE,
17778+ PM_CLASS_VARIABLE_TARGET_NODE, PM_GLOBAL_VARIABLE_TARGET_NODE, PM_CONSTANT_TARGET_NODE,
17779+ PM_CONSTANT_PATH_TARGET_NODE, PM_CALL_TARGET_NODE, PM_INDEX_TARGET_NODE, PM_MULTI_TARGET_NODE, PM_REQUIRED_PARAMETER_NODE);
1775817780 pm_multi_target_node_targets_append(parser, multi_target, statement);
1775917781
1776017782 statement = UP(multi_target);
0 commit comments