[ruby/yarp] Handle invalid multiple parameters
https://github.com/ruby/yarp/commit/2f83265653
This commit is contained in:
parent
7a1c497426
commit
e66e60cf69
Notes:
git
2023-08-17 00:48:09 +00:00
35
yarp/yarp.c
35
yarp/yarp.c
@ -3221,6 +3221,7 @@ yp_parameters_node_posts_append(yp_parameters_node_t *params, yp_node_t *param)
|
||||
// Set the rest parameter on a ParametersNode node.
|
||||
static void
|
||||
yp_parameters_node_rest_set(yp_parameters_node_t *params, yp_rest_parameter_node_t *param) {
|
||||
assert(params->rest == NULL);
|
||||
yp_parameters_node_location_set(params, (yp_node_t *) param);
|
||||
params->rest = param;
|
||||
}
|
||||
@ -3235,6 +3236,7 @@ yp_parameters_node_keywords_append(yp_parameters_node_t *params, yp_node_t *para
|
||||
// Set the keyword rest parameter on a ParametersNode node.
|
||||
static void
|
||||
yp_parameters_node_keyword_rest_set(yp_parameters_node_t *params, yp_node_t *param) {
|
||||
assert(params->keyword_rest == NULL);
|
||||
yp_parameters_node_location_set(params, param);
|
||||
params->keyword_rest = param;
|
||||
}
|
||||
@ -3242,6 +3244,7 @@ yp_parameters_node_keyword_rest_set(yp_parameters_node_t *params, yp_node_t *par
|
||||
// Set the block parameter on a ParametersNode node.
|
||||
static void
|
||||
yp_parameters_node_block_set(yp_parameters_node_t *params, yp_block_parameter_node_t *param) {
|
||||
assert(params->block == NULL);
|
||||
yp_parameters_node_location_set(params, (yp_node_t *) param);
|
||||
params->block = param;
|
||||
}
|
||||
@ -8321,7 +8324,13 @@ parse_parameters(
|
||||
}
|
||||
|
||||
yp_block_parameter_node_t *param = yp_block_parameter_node_create(parser, &name, &operator);
|
||||
yp_parameters_node_block_set(params, param);
|
||||
if (params->block == NULL) {
|
||||
yp_parameters_node_block_set(params, param);
|
||||
} else {
|
||||
yp_diagnostic_list_append(&parser->error_list, param->base.location.start, param->base.location.end, "Unexpected multiple block parameter");
|
||||
yp_parameters_node_posts_append(params, (yp_node_t *) param);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case YP_TOKEN_UDOT_DOT_DOT: {
|
||||
@ -8472,7 +8481,13 @@ parse_parameters(
|
||||
}
|
||||
|
||||
yp_rest_parameter_node_t *param = yp_rest_parameter_node_create(parser, &operator, &name);
|
||||
yp_parameters_node_rest_set(params, param);
|
||||
if (params->rest == NULL) {
|
||||
yp_parameters_node_rest_set(params, param);
|
||||
} else {
|
||||
yp_diagnostic_list_append(&parser->error_list, param->base.location.start, param->base.location.end, "Unexpected multiple splat parameters.");
|
||||
yp_parameters_node_posts_append(params, (yp_node_t *) param);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case YP_TOKEN_STAR_STAR:
|
||||
@ -8500,7 +8515,13 @@ parse_parameters(
|
||||
param = (yp_node_t *) yp_keyword_rest_parameter_node_create(parser, &operator, &name);
|
||||
}
|
||||
|
||||
yp_parameters_node_keyword_rest_set(params, param);
|
||||
if (params->keyword_rest == NULL) {
|
||||
yp_parameters_node_keyword_rest_set(params, param);
|
||||
} else {
|
||||
yp_diagnostic_list_append(&parser->error_list, param->location.start, param->location.end, "Unexpected multiple double splat parameters.");
|
||||
yp_parameters_node_posts_append(params, param);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@ -8511,7 +8532,13 @@ parse_parameters(
|
||||
// represent it.
|
||||
yp_token_t name = not_provided(parser);
|
||||
yp_rest_parameter_node_t *param = yp_rest_parameter_node_create(parser, &parser->previous, &name);
|
||||
yp_parameters_node_rest_set(params, param);
|
||||
|
||||
if (params->rest == NULL) {
|
||||
yp_parameters_node_rest_set(params, param);
|
||||
} else {
|
||||
yp_diagnostic_list_append(&parser->error_list, param->base.location.start, param->base.location.end, "Unexpected multiple splat parameters.");
|
||||
yp_parameters_node_posts_append(params, (yp_node_t *) param);
|
||||
}
|
||||
} else {
|
||||
yp_diagnostic_list_append(&parser->error_list, parser->previous.start, parser->previous.end, "Unexpected ','.");
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user