[ruby/prism] No writing to numbered parameters

Fixes [Bug #21117]

https://github.com/ruby/prism/commit/19d4bab5a0
This commit is contained in:
Kevin Newton 2025-02-13 14:17:53 -05:00 committed by git
parent b21e1aed2e
commit 127325a4ba
6 changed files with 29 additions and 2 deletions

View File

@ -63,7 +63,7 @@ module Prism
class Node
def newline_flag? # :nodoc:
@newline_flag ? true : false
!!defined?(@newline_flag)
end
def newline_flag!(lines) # :nodoc:

View File

@ -21219,6 +21219,11 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t
return result;
}
case PM_LOCAL_VARIABLE_READ_NODE: {
if (pm_token_is_numbered_parameter(node->location.start, node->location.end)) {
PM_PARSER_ERR_FORMAT(parser, node->location.start, node->location.end, PM_ERR_PARAMETER_NUMBERED_RESERVED, node->location.start);
parse_target_implicit_parameter(parser, node);
}
pm_local_variable_read_node_t *cast = (pm_local_variable_read_node_t *) node;
parser_lex(parser);
@ -21337,6 +21342,11 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t
return result;
}
case PM_LOCAL_VARIABLE_READ_NODE: {
if (pm_token_is_numbered_parameter(node->location.start, node->location.end)) {
PM_PARSER_ERR_FORMAT(parser, node->location.start, node->location.end, PM_ERR_PARAMETER_NUMBERED_RESERVED, node->location.start);
parse_target_implicit_parameter(parser, node);
}
pm_local_variable_read_node_t *cast = (pm_local_variable_read_node_t *) node;
parser_lex(parser);
@ -21465,6 +21475,11 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t
return result;
}
case PM_LOCAL_VARIABLE_READ_NODE: {
if (pm_token_is_numbered_parameter(node->location.start, node->location.end)) {
PM_PARSER_ERR_FORMAT(parser, node->location.start, node->location.end, PM_ERR_PARAMETER_NUMBERED_RESERVED, node->location.start);
parse_target_implicit_parameter(parser, node);
}
pm_local_variable_read_node_t *cast = (pm_local_variable_read_node_t *) node;
parser_lex(parser);

View File

@ -0,0 +1,3 @@
tap { _1 &&= 1 }
^~ _1 is reserved for numbered parameters

View File

@ -0,0 +1,3 @@
tap { _1 += 1 }
^~ _1 is reserved for numbered parameters

View File

@ -0,0 +1,3 @@
tap { _1 ||= 1 }
^~ _1 is reserved for numbered parameters

View File

@ -14,7 +14,10 @@ module Prism
"targeting_numbered_parameter.txt",
"defining_numbered_parameter.txt",
"defining_numbered_parameter_2.txt",
"numbered_parameters_in_block_arguments.txt"
"numbered_parameters_in_block_arguments.txt",
"numbered_and_write.txt",
"numbered_or_write.txt",
"numbered_operator_write.txt"
]
end