Skip to content

Commit fbad866

Browse files
authored
Merge pull request #3306 from tenderlove/numbered-param
Same numbered param cannot be used in child blocks
2 parents 5f11d52 + d4fc441 commit fbad866

File tree

2 files changed

+6
-2
lines changed

2 files changed

+6
-2
lines changed

src/prism.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16408,14 +16408,15 @@ static pm_node_t *
1640816408
parse_variable(pm_parser_t *parser) {
1640916409
pm_constant_id_t name_id = pm_parser_constant_id_token(parser, &parser->previous);
1641016410
int depth;
16411+
bool is_numbered_param = pm_token_is_numbered_parameter(parser->previous.start, parser->previous.end);
1641116412

16412-
if ((depth = pm_parser_local_depth_constant_id(parser, name_id)) != -1) {
16413+
if (!is_numbered_param && ((depth = pm_parser_local_depth_constant_id(parser, name_id)) != -1)) {
1641316414
return (pm_node_t *) pm_local_variable_read_node_create_constant_id(parser, &parser->previous, name_id, (uint32_t) depth, false);
1641416415
}
1641516416

1641616417
pm_scope_t *current_scope = parser->current_scope;
1641716418
if (!current_scope->closed && !(current_scope->parameters & PM_SCOPE_PARAMETERS_IMPLICIT_DISALLOWED)) {
16418-
if (pm_token_is_numbered_parameter(parser->previous.start, parser->previous.end)) {
16419+
if (is_numbered_param) {
1641916420
// When you use a numbered parameter, it implies the existence of
1642016421
// all of the locals that exist before it. For example, referencing
1642116422
// _2 means that _1 must exist. Therefore here we loop through all
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
-> { _1 + -> { _1 } }
2+
^~ numbered parameter is already used in outer block
3+

0 commit comments

Comments
 (0)