merge revision(s) 127325a4ba: [Backport #21117]

[ruby/prism] No writing to numbered parameters

	Fixes [Bug #21117]

	19d4bab5a0
This commit is contained in:
Takashi Kokubun 2025-02-13 21:17:04 -08:00
parent e3b16320e6
commit d3fc56dcfa
7 changed files with 30 additions and 3 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

@ -21058,6 +21058,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);
@ -21176,6 +21181,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);
@ -21304,6 +21314,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

View file

@ -11,7 +11,7 @@
# define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR
#define RUBY_VERSION_TEENY 1
#define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR
#define RUBY_PATCHLEVEL 25
#define RUBY_PATCHLEVEL 26
#include "ruby/version.h"
#include "ruby/internal/abi.h"