[ruby/prism] No writing to numbered parameters
Fixes [Bug #21117] https://github.com/ruby/prism/commit/19d4bab5a0
This commit is contained in:
parent
b21e1aed2e
commit
127325a4ba
@ -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:
|
||||
|
@ -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);
|
||||
|
||||
|
3
test/prism/errors/numbered_and_write.txt
Normal file
3
test/prism/errors/numbered_and_write.txt
Normal file
@ -0,0 +1,3 @@
|
||||
tap { _1 &&= 1 }
|
||||
^~ _1 is reserved for numbered parameters
|
||||
|
3
test/prism/errors/numbered_operator_write.txt
Normal file
3
test/prism/errors/numbered_operator_write.txt
Normal file
@ -0,0 +1,3 @@
|
||||
tap { _1 += 1 }
|
||||
^~ _1 is reserved for numbered parameters
|
||||
|
3
test/prism/errors/numbered_or_write.txt
Normal file
3
test/prism/errors/numbered_or_write.txt
Normal file
@ -0,0 +1,3 @@
|
||||
tap { _1 ||= 1 }
|
||||
^~ _1 is reserved for numbered parameters
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user