[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
|
class Node
|
||||||
def newline_flag? # :nodoc:
|
def newline_flag? # :nodoc:
|
||||||
@newline_flag ? true : false
|
!!defined?(@newline_flag)
|
||||||
end
|
end
|
||||||
|
|
||||||
def newline_flag!(lines) # :nodoc:
|
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;
|
return result;
|
||||||
}
|
}
|
||||||
case PM_LOCAL_VARIABLE_READ_NODE: {
|
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;
|
pm_local_variable_read_node_t *cast = (pm_local_variable_read_node_t *) node;
|
||||||
parser_lex(parser);
|
parser_lex(parser);
|
||||||
|
|
||||||
@ -21337,6 +21342,11 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
case PM_LOCAL_VARIABLE_READ_NODE: {
|
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;
|
pm_local_variable_read_node_t *cast = (pm_local_variable_read_node_t *) node;
|
||||||
parser_lex(parser);
|
parser_lex(parser);
|
||||||
|
|
||||||
@ -21465,6 +21475,11 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
case PM_LOCAL_VARIABLE_READ_NODE: {
|
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;
|
pm_local_variable_read_node_t *cast = (pm_local_variable_read_node_t *) node;
|
||||||
parser_lex(parser);
|
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",
|
"targeting_numbered_parameter.txt",
|
||||||
"defining_numbered_parameter.txt",
|
"defining_numbered_parameter.txt",
|
||||||
"defining_numbered_parameter_2.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
|
end
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user