зеркало из https://github.com/github/ruby.git
[ruby/prism] Disallow multi writes when not in statement level
https://github.com/ruby/prism/commit/fe34a77df2
This commit is contained in:
Родитель
556bbf64e0
Коммит
0d5eea9957
|
@ -266,6 +266,7 @@ errors:
|
|||
- UNEXPECTED_BLOCK_ARGUMENT
|
||||
- UNEXPECTED_INDEX_BLOCK
|
||||
- UNEXPECTED_INDEX_KEYWORDS
|
||||
- UNEXPECTED_MULTI_WRITE
|
||||
- UNEXPECTED_SAFE_NAVIGATION
|
||||
- UNEXPECTED_TOKEN_CLOSE_CONTEXT
|
||||
- UNEXPECTED_TOKEN_IGNORE
|
||||
|
|
|
@ -19901,10 +19901,15 @@ parse_assignment_value_local(pm_parser_t *parser, const pm_node_t *node) {
|
|||
*/
|
||||
static pm_node_t *
|
||||
parse_assignment_values(pm_parser_t *parser, pm_binding_power_t previous_binding_power, pm_binding_power_t binding_power, bool accepts_command_call, pm_diagnostic_id_t diag_id) {
|
||||
pm_node_t *value = parse_starred_expression(parser, binding_power, previous_binding_power == PM_BINDING_POWER_ASSIGNMENT ? accepts_command_call : previous_binding_power < PM_BINDING_POWER_MATCH, diag_id);
|
||||
parse_assignment_value_local(parser, value);
|
||||
bool permitted = true;
|
||||
if (previous_binding_power != PM_BINDING_POWER_STATEMENT && match1(parser, PM_TOKEN_USTAR)) permitted = false;
|
||||
|
||||
pm_node_t *value = parse_starred_expression(parser, binding_power, previous_binding_power == PM_BINDING_POWER_ASSIGNMENT ? accepts_command_call : previous_binding_power < PM_BINDING_POWER_MATCH, diag_id);
|
||||
if (!permitted) pm_parser_err_node(parser, value, PM_ERR_UNEXPECTED_MULTI_WRITE);
|
||||
|
||||
parse_assignment_value_local(parser, value);
|
||||
bool single_value = true;
|
||||
|
||||
if (previous_binding_power == PM_BINDING_POWER_STATEMENT && (PM_NODE_TYPE_P(value, PM_SPLAT_NODE) || match1(parser, PM_TOKEN_COMMA))) {
|
||||
single_value = false;
|
||||
|
||||
|
|
|
@ -347,6 +347,7 @@ static const pm_diagnostic_data_t diagnostic_messages[PM_DIAGNOSTIC_ID_MAX] = {
|
|||
[PM_ERR_UNEXPECTED_BLOCK_ARGUMENT] = { "block argument should not be given", PM_ERROR_LEVEL_SYNTAX },
|
||||
[PM_ERR_UNEXPECTED_INDEX_BLOCK] = { "unexpected block arg given in index assignment; blocks are not allowed in index assignment expressions", PM_ERROR_LEVEL_SYNTAX },
|
||||
[PM_ERR_UNEXPECTED_INDEX_KEYWORDS] = { "unexpected keyword arg given in index assignment; keywords are not allowed in index assignment expressions", PM_ERROR_LEVEL_SYNTAX },
|
||||
[PM_ERR_UNEXPECTED_MULTI_WRITE] = { "unexpected multiple assignment; multiple assignment is not allowed in this context", PM_ERROR_LEVEL_SYNTAX },
|
||||
[PM_ERR_UNEXPECTED_SAFE_NAVIGATION] = { "&. inside multiple assignment destination", PM_ERROR_LEVEL_SYNTAX },
|
||||
[PM_ERR_UNEXPECTED_TOKEN_CLOSE_CONTEXT] = { "unexpected %s, assuming it is closing the parent %s", PM_ERROR_LEVEL_SYNTAX },
|
||||
[PM_ERR_UNEXPECTED_TOKEN_IGNORE] = { "unexpected %s, ignoring it", PM_ERROR_LEVEL_SYNTAX },
|
||||
|
|
Загрузка…
Ссылка в новой задаче