diff options
| author | Kevin Newton <kddnewton@gmail.com> | 2024-04-01 14:41:45 -0400 |
|---|---|---|
| committer | git <svn-admin@ruby-lang.org> | 2024-04-01 19:28:03 +0000 |
| commit | fee70c1ed71dd0db4ce9a2226dc5f4845e0a0c48 (patch) | |
| tree | 0a46c2c0a929149d17aefe18c9c9953999c84855 | |
| parent | 1e737ec97760fa7dd5436e9e41fefb5f71566344 (diff) | |
[ruby/prism] Add better error messages for invalid block-locals
https://github.com/ruby/prism/commit/27ad452436
| -rw-r--r-- | prism/prism.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/prism/prism.c b/prism/prism.c index 7527e3c55c..01b920b2d0 100644 --- a/prism/prism.c +++ b/prism/prism.c @@ -1988,7 +1988,6 @@ pm_block_parameters_node_closing_set(pm_block_parameters_node_t *node, const pm_ */ static pm_block_local_variable_node_t * pm_block_local_variable_node_create(pm_parser_t *parser, const pm_token_t *name) { - assert(name->type == PM_TOKEN_IDENTIFIER || name->type == PM_TOKEN_MISSING); pm_block_local_variable_node_t *node = PM_ALLOC_NODE(parser, pm_block_local_variable_node_t); *node = (pm_block_local_variable_node_t) { @@ -13587,7 +13586,28 @@ parse_block_parameters( if (accept1(parser, PM_TOKEN_SEMICOLON)) { do { - expect1(parser, PM_TOKEN_IDENTIFIER, PM_ERR_BLOCK_PARAM_LOCAL_VARIABLE); + switch (parser->current.type) { + case PM_TOKEN_CONSTANT: + pm_parser_err_current(parser, PM_ERR_ARGUMENT_FORMAL_CONSTANT); + parser_lex(parser); + break; + case PM_TOKEN_INSTANCE_VARIABLE: + pm_parser_err_current(parser, PM_ERR_ARGUMENT_FORMAL_IVAR); + parser_lex(parser); + break; + case PM_TOKEN_GLOBAL_VARIABLE: + pm_parser_err_current(parser, PM_ERR_ARGUMENT_FORMAL_GLOBAL); + parser_lex(parser); + break; + case PM_TOKEN_CLASS_VARIABLE: + pm_parser_err_current(parser, PM_ERR_ARGUMENT_FORMAL_CLASS); + parser_lex(parser); + break; + default: + expect1(parser, PM_TOKEN_IDENTIFIER, PM_ERR_BLOCK_PARAM_LOCAL_VARIABLE); + break; + } + bool repeated = pm_parser_parameter_name_check(parser, &parser->previous); pm_parser_local_add_token(parser, &parser->previous); |
