Skip to content

Commit 75c4906

Browse files
committed
No writing to numbered parameters
Fixes [Bug #21117]
1 parent e594e1f commit 75c4906

File tree

6 files changed

+17
-2
lines changed

6 files changed

+17
-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: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21223,6 +21223,7 @@ 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+
pm_refute_numbered_parameter(parser, node->location.start, node->location.end);
2122621227
pm_local_variable_read_node_t *cast = (pm_local_variable_read_node_t *) node;
2122721228
parser_lex(parser);
2122821229

@@ -21341,6 +21342,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t
2134121342
return result;
2134221343
}
2134321344
case PM_LOCAL_VARIABLE_READ_NODE: {
21345+
pm_refute_numbered_parameter(parser, node->location.start, node->location.end);
2134421346
pm_local_variable_read_node_t *cast = (pm_local_variable_read_node_t *) node;
2134521347
parser_lex(parser);
2134621348

@@ -21469,6 +21471,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t
2146921471
return result;
2147021472
}
2147121473
case PM_LOCAL_VARIABLE_READ_NODE: {
21474+
pm_refute_numbered_parameter(parser, node->location.start, node->location.end);
2147221475
pm_local_variable_read_node_t *cast = (pm_local_variable_read_node_t *) node;
2147321476
parser_lex(parser);
2147421477

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)