Skip to content

Commit 237158d

Browse files
authored
Merge pull request #3462 from ruby/no-writing-to-numbered
No writing to numbered parameters
2 parents e594e1f + 19d4bab commit 237158d

File tree

6 files changed

+29
-2
lines changed

6 files changed

+29
-2
lines changed

lib/prism/parse_result/newlines.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def visit_statements_node(node)
6363

6464
class Node
6565
def newline_flag? # :nodoc:
66-
@newline_flag ? true : false
66+
!!defined?(@newline_flag)
6767
end
6868

6969
def newline_flag!(lines) # :nodoc:

src/prism.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21223,6 +21223,11 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t
2122321223
return result;
2122421224
}
2122521225
case PM_LOCAL_VARIABLE_READ_NODE: {
21226+
if (pm_token_is_numbered_parameter(node->location.start, node->location.end)) {
21227+
PM_PARSER_ERR_FORMAT(parser, node->location.start, node->location.end, PM_ERR_PARAMETER_NUMBERED_RESERVED, node->location.start);
21228+
parse_target_implicit_parameter(parser, node);
21229+
}
21230+
2122621231
pm_local_variable_read_node_t *cast = (pm_local_variable_read_node_t *) node;
2122721232
parser_lex(parser);
2122821233

@@ -21341,6 +21346,11 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t
2134121346
return result;
2134221347
}
2134321348
case PM_LOCAL_VARIABLE_READ_NODE: {
21349+
if (pm_token_is_numbered_parameter(node->location.start, node->location.end)) {
21350+
PM_PARSER_ERR_FORMAT(parser, node->location.start, node->location.end, PM_ERR_PARAMETER_NUMBERED_RESERVED, node->location.start);
21351+
parse_target_implicit_parameter(parser, node);
21352+
}
21353+
2134421354
pm_local_variable_read_node_t *cast = (pm_local_variable_read_node_t *) node;
2134521355
parser_lex(parser);
2134621356

@@ -21469,6 +21479,11 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t
2146921479
return result;
2147021480
}
2147121481
case PM_LOCAL_VARIABLE_READ_NODE: {
21482+
if (pm_token_is_numbered_parameter(node->location.start, node->location.end)) {
21483+
PM_PARSER_ERR_FORMAT(parser, node->location.start, node->location.end, PM_ERR_PARAMETER_NUMBERED_RESERVED, node->location.start);
21484+
parse_target_implicit_parameter(parser, node);
21485+
}
21486+
2147221487
pm_local_variable_read_node_t *cast = (pm_local_variable_read_node_t *) node;
2147321488
parser_lex(parser);
2147421489

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
tap { _1 &&= 1 }
2+
^~ _1 is reserved for numbered parameters
3+
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
tap { _1 += 1 }
2+
^~ _1 is reserved for numbered parameters
3+
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
tap { _1 ||= 1 }
2+
^~ _1 is reserved for numbered parameters
3+

test/prism/errors_test.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@ class ErrorsTest < TestCase
1414
"targeting_numbered_parameter.txt",
1515
"defining_numbered_parameter.txt",
1616
"defining_numbered_parameter_2.txt",
17-
"numbered_parameters_in_block_arguments.txt"
17+
"numbered_parameters_in_block_arguments.txt",
18+
"numbered_and_write.txt",
19+
"numbered_or_write.txt",
20+
"numbered_operator_write.txt"
1821
]
1922
end
2023

0 commit comments

Comments
 (0)